您的位置:首页 > 其它

HDU 2852 KiKi's K-Number 主席树或树状数组

2015-04-10 11:01 459 查看
主席树的简单应用但是貌似主席树被卡了,但用树状数组能过。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=100010;
int x[maxn],bit[maxn];
int low(int p){ return p&(-p);}
void merg(int p,int n,int k){
while(p<=n){
bit[p]+=k;
p=p+low(p);
}
}
int sum(int p){
int s=0;
while(p>0){
s+=bit[p];
p=p-low(p);
}
return s;
}
int main()
{
int i,j,n,m;
while(cin>>m){
memset(x,0,sizeof(x));
memset(bit,0,sizeof(bit));
for(i=0;i<m;i++){
int p;
scanf("%d",&p);
if(p==0){
scanf("%d",&p);
x[p]++;
merg(p,100000,1);
}
else if(p==1){
scanf("%d",&p);
if(x[p]==0) printf("No Elment!\n");
else{
merg(p,100000,-1);
x[p]--;
}
}
else{
int a,b;
scanf("%d%d",&a,&b);
int le,ri,mid;
le=a+1;
ri=100000;
while(le<=ri){
mid=(le+ri)/2;
if(sum(mid)-sum(a)>=b) ri=mid-1;
else le=mid+1;
}
if(le>100000) printf("Not Find!\n");
else printf("%d\n",le);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: