记录编号 392299 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 2591.[HZOI 2016]tb的平衡树 最终得分 100
用户昵称 AntiLeaf 是否通过 通过
代码语言 C++ 运行时间 2.024 s
提交时间 2017-04-07 19:01:50 内存使用 2.29 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Anti __attribute__((optimize("-Os")))
#define Leaf __inline__ __attribute__((always_inline))
#define dir(x) ((x)==(x)->p->ch[1])
using namespace std;
const int maxn=262200,M=131072;
namespace mine{
	#define siz (1<<20)
	#define frd fread(hd=buf,1,siz,stdin)
	#define getchar() (hd==tl?(frd,*hd++):*hd++)
	char buf[siz],*hd=buf+siz,*tl=buf+siz;
	template<class T>Anti Leaf void readint(register T &x){
		register int c,neg=0;
		x=0;
		do c=getchar();while(c<'-');
		if(c=='-'){
			neg=1;
			c=getchar();
		}
		for(;c>47;c=getchar())x=x*10+(c^48);
		if(neg)x=-x;
	}
	template<class T>Anti Leaf void writeint(register T x){
		static int a[25];
		if(x<0){
			putchar('-');
			x=-x;
		}
		register int i=0;
		do{
			a[i++]=x%10^48;
			x/=10;
		}while(x);
		for(--i;~i;--i)putchar(a[i]);
		putchar('\n');
	}
}
using namespace mine;
int qsum(int,int);
int kth(int);
int n,d,x,a[maxn]={0};
int main(){
	freopen("tb_kp.in","r",stdin);
	freopen("tb_kp.out","w",stdout);
	readint(n);
	while(n--){
		readint(d);
		if(d<7)readint(x);
		if(d!=4)x+=32768;
		if(d==1)for(x+=M;x;x>>=1)a[x]++;
		else if(d==2)for(x+=M;x;x>>=1)a[x]--;
		else if(d==3)writeint(qsum(1,x-1)+1);
		else if(d==4)writeint(kth(x));
		else if(d==5){
			d=qsum(1,x-1);
			writeint(d?kth(d):-0x3f3f3f3f);
		}
		else if(d==6){
			d=qsum(1,x)+1;
			writeint(d?kth(d):0x3f3f3f3f);
		}
		else if(d==7)writeint(kth(1));
		else writeint(kth(a[1]));
	}
	return 0;
}
inline int qsum(register int l,register int r){
	register int ans=0;
	for(l+=M-1,r+=M+1;l^r^1;l>>=1,r>>=1){
		if(~l&1)ans+=a[l^1];
		if(r&1)ans+=a[r^1];
	}
	return ans;
}
inline int kth(register int k){
	register int rt=1;
	while(rt<M)if(a[rt<<=1]<k){
		k-=a[rt];
		rt^=1;
	}
	return rt-M-32768;
}