【bzoj3224】普通平衡树_di679520024669的博客-程序员秘密

看有没有人能发现咯。

#include<bits/stdc++.h>
#define N 300005
#define rat 4
#define pushup(o) if(o->lc->size)o->size=o->lc->size+o->rc->size,o->val=o->rc->val
#define newnode(s,v,a,b) (&(*st[cnt++]=Node(s,v,a,b)))
#define merge(a,b) newnode(a->size+b->size,b->val,a,b)
using namespace std;
struct Node{
    int size,val;Node *lc,*rc;
    Node(int s,int v,Node *a,Node *b):size(s),val(v),lc(a),rc(b){}
    Node(){}
}*rt,*nul;
struct Finger_Tree{
    Node *fa,t[N],*st[N];
    int cnt;
    inline void maintain(Node *o){
        if(o->lc->size>o->rc->size*4){
            o->rc=merge(o->lc->rc,o->rc);
            st[--cnt]=o->lc;o->lc=o->lc->lc;
        }
        else if(o->rc->size>o->lc->size*4){
             o->lc=merge(o->lc,o->rc->lc);
             st[--cnt]=o->rc;o->rc=o->rc->rc;
        }
    }
    int find(int x,Node *o){
        if(o->size==1)return o->val;
        return x>o->lc->size?find(x-o->lc->size,o->rc):find(x,o->lc);
    }
    int queryrank(int x,Node *o){
        if(o->size==1)return 1;
        return x>o->lc->val?queryrank(x,o->rc)+o->lc->size:queryrank(x,o->lc);
    }
    void ins(int x,Node *o){
        if(o->size==1){
            o->lc=newnode(1,min(x,o->val),nul,nul);
            o->rc=newnode(1,max(x,o->val),nul,nul);
        }
        else ins(x,x>o->lc->val?o->rc:o->lc);
        pushup(o);maintain(o);
    }
    void del(int x,Node *o){
        if(o->size==1)*fa=o==fa->lc?*fa->rc:*fa->lc;
        else fa=o,del(x,x>o->lc->val?o->rc:o->lc);
        pushup(o);maintain(o);
    }
}T;
inline int read(){
    register int f=1,x=0;char ch;
    do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
    do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
    return f*x;
}
int main(){
    int n=read();
    for(int i=0;i<=N-5;i++)T.st[i]=&T.t[i];
    nul=new Node(0,0,0,0);
    rt=new Node(1,2147483647,nul,nul);
    while(n--){
        int opt=read(),x=read();
        if(opt==1)T.ins(x,rt);
        if(opt==2)T.del(x,rt);
        if(opt==3)printf("%d\n",T.queryrank(x,rt));
        if(opt==4)printf("%d\n",T.find(x,rt));
        if(opt==5)printf("%d\n",T.find(T.queryrank(x,rt)-1,rt));
        if(opt==6)printf("%d\n",T.find(T.queryrank(x+1,rt),rt));
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/zcysky/p/6973214.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/di679520024669/article/details/101760155

智能推荐

java网络编程:9、基于TCP的socket编程(二)服务器端循环监听接收多个客户端_多线程服务器程序_华哥折腾历险记的博客-程序员秘密

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!文章目录一、核心代码编写1、服务器端程序的编写2、客户端程序的编写3、测试打印输出二、系列文章(java网络编程)上篇讲了基于tcp的编程的一些基础知识,还写了一个简单的socket通信的代码,大家如需了解可参考java网络编程:8、基于TCP的socket编程(一)简单的sock...

STM32基于hal库的智能小车(1)_sea1216的博客-程序员秘密

以前做了一个红外遥控、避障和寻线的小车,用的是固件库,现在流行hal库,于是在这新冠也不能出门之际,重新用hal库做一个,并准备用上PWM来调节速度,并用wifi遥控,本人新手,有好的方法和错误的望指点!谢谢!**材料:**小车自己安装,STM32核心板,两个l298n电机驱动模块(“5v输出可不接”我将它用来给单片机供电,通道使能后期用PWM控制来调节速度,暂时直接使能就好),其他需要用的后期...

LINUX内核模块编程_diy534的博客-程序员秘密

http://tbbs.chinaunix.net/archiver/tid-852547.htmlLINUX内核模块编程[转]ForewordTable of Contents作者声明版本和注意感谢译者注作者声明《Linux内核驱动模块编程指南》最初是由Ori Pomerantz为2.2版本的内核编写的 ,后来,Ori将文档维护的任务交给了Pete

RocketMQ之PullConsumer消息拉取实现_泮小俊233的博客-程序员秘密

PullConsumer拉去消息需要自己调用pull方法主动去拉取消息,调用DefaultMQPullConsumer的pull方法。 public PullResult pull(MessageQueue mq, String subExpression, long offset, int maxNums, long timeout) throws MQClientExce...

elasticsearch _update更新部分字段内容以及删除字段_elasticsearch update_细水长流,生命不止的博客-程序员秘密

https://www.elastic.co/guide/cn/elasticsearch/guide/current/partial-updates.htmlelasticsearch _update更新部分字段内容update 请求最简单的一种形式是接收文档的一部分作为 doc 的参数, 它只是与现有的文档进行合并。对象被合并到一起,覆盖现有的字段,增加新的字段。POST /websit...

Mysql sql语句字段截取前几位,后几位等+Mybatis中的大于小于等的判断写法+Mysql如何正则匹配查询_mybatis 截取字段前4位_童话ing的博客-程序员秘密

文章目录一、Mysql sql语句字段截取前几位,后几位等二、Mybatis中的大于小于等的判断写法三、Mysql如何正则匹配查询一、Mysql sql语句字段截取前几位,后几位等MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。1. 字符串截取:left(str, le

随便推点

多线程GCD dispatch_once_t/dispatch_barrier_<a>sync/dispatch_group_t_ZHANGBO9477的博客-程序员秘密

dispatch_once在dispatch_once block中的代码在程序启动到程序退回只会执行一次,如:不管for循环多少,只会一次打印for (int i = 0; i&lt;10; i++) { static dispatch_once_t onceToken; dispatch_once(&amp;onceToken, ^{ ...

深度学习网络出现nan的原因与解决方法总结_tanh输出nan_琼雪染霜华的博客-程序员秘密

梯度爆炸解决方案:数据归一化(减均值,除方差,加入normalization,如BN,L2 norm)减少学习率,减小batchsize加入gradient clipping网络设计的问题解决方案:弱化场景,简化样本,参数采用典型配置,比如10万样本都是一个样本复制的,让网络拟合,如果有问题,则是网络的问题,否则是参数的问题,网络的问题则需要通过不断加大样本的复杂度和调整网...

【2020.5】Mac mysql安装配置文件my.cnf(1055 "this is incompatible with sql_mode=only_full_group_by"错误 )_啊啊啊狗哥的博客-程序员秘密

近日Mysql使用groupby查询时提示报错1055 this is incompatible with sql_mode=only_full_group_by怒查N篇帖子发现是在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行,其实,是我们的SQL不规范造成的,因为group by 之后,返回的一些数据是不确定的,所以才会出现这个...

Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO_程序员 jet_qi的博客-程序员秘密

Java基础知识(JVM/集合框架/异常体系/Java反射/语法知识/Java IO)分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JVM,java异常体系,java集合类,java IO,基本语法,框架相关知识点这六大模块,日常开发中的小技巧也收录在其中,用于查漏补缺,学而时习之,不亦乐乎文章目录Java基础知识(JVM/集合框架/异常体系/Java反射/语法知识/Java IO)1、JVM相关1.1、谈谈你对Java平台的理解? “Java是解释执行”,这句话正确吗?

Revit二开--入门三部曲_binbinstrong的博客-程序员秘密

Revit二开–入门三部曲Revit二次开发的门槛还是卡住了好多刚入门的朋友,有的人找不到lookup工具,有的人找不到SDK,有的人加载不上AddinManager 还有的人,不知道哪里有c#资料,以上条件都具备的朋友,带着兴奋的心情开始了第一个revit二开程序,困难又来了,无论如何都没有调试通过,本篇博客带大家详细了解Revit二开的入门知识。一、入门准备资料1、Revit软件 ,最...

Java微信获取昵称方法_微信 获取 用户 昵称(示例代码)_商界鬼谷子的博客-程序员秘密

import java.util.ResourceBundle;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSONObject;public class WxUserInfo {private static Logger log = LoggerFactory.getLogg...

推荐文章

热门文章

相关标签