标签:
这是一道模板题。
如果觉得这个题水的可以做一下4544压行,是千古神犇花爸爸出的神犇题。
您需要写一种数据结构(可参考题目标题,但是这句话其实并没有什么用233),来维护一些数,其中需要提供以下操作:
1. 插入x数
2. 删除x数(若有多个相同的数,因只删除一个)
3. 查询x数的排名(若有多个相同的数,因输出最小的排名)
4. 查询排名为x的数
5. 求x的前驱(前驱定义为小于x,且最大的数)
6. 求x的后继(后继定义为大于x,且最小的数)
第一行为n,表示操作的个数,下面n行每行有两个数opt和x,opt表示操作的序号(1<=opt<=6)
对于操作3,4,5,6每行输出一个数,表示对应答案
10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
EOF(无输出)
n=100000 所有数字均在-2*10^9到2*10^9内
其实n=5000000才对。。。但是为了不卡评测机
//未完结 #include<cstdio> #include<algorithm> #include<set> using namespace std; set<int>s; set<int>::iterator it; int main(){ int n; scanf("%d",&n); for(int i=1,t,opt,x;i<=n;i++){ scanf("%d%d",&opt,&x); t=0; if(opt==1){ s.insert(x); } else if(opt==2){ s.erase(x); } else if(opt==3){ for(it=s.begin();it!=s.end();it++){ //此处省略 } } else if(opt==4){ for(it=s.begin();it!=s.end();it++){ if(++t==x){ printf("%d\n",*it); break; } } } else if(opt==5){ //此处省略 } else if(opt==6){ //此处省略 } } return 0; }
标签:
原文地址:http://www.cnblogs.com/shenben/p/5796956.html