#include<cstdio>
#include<cstring>
#define MAX_N 100010
int bit[MAX_N],count[MAX_N];
void add(int i,int v)
{
while(i<=MAX_N)
{
bit[i]+=v;
i+=i&-i;
}
}
int sum(int i)
{
int res=0;
while(i>0)
{
res+=bit[i];
i-=i&-i;
}
return res;
}
int find(int a,int k)
{
int l=a,r=MAX_N,lo=sum(a);
while(l<r)
{
int m=(l+r)>>1;
if((sum(m)-lo)<k)
l=m+1;
else
r=m;
}
return l;
}
int main()
{
int Q,t,i,k;
while(~scanf("%d",&Q))
{
memset(bit,0,sizeof(bit));
memset(count,0,sizeof(count));
while(Q--)
{
scanf("%d",&t);
if(t==0)
{
scanf("%d",&i);
count[i]++;
add(i,1);
}
else if(t==1)
{
scanf("%d",&i);
if(count[i]>0)
{
count[i]--;
add(i,-1);
}
else
printf("No Elment!\n");
}
else
{
scanf("%d%d",&i,&k);
int cnt=sum(MAX_N)-sum(i);
if(cnt<k)
printf("Not Find!\n");
else
printf("%d\n",find(i,k));
}
}
}
}
hdu 2852 (求某个序列第k大的值,可以任意删除其中的元素和添加元素)
最新推荐文章于 2021-01-12 14:22:17 发布