#include<iostream> #include<cstring> using namespace std; const int N = 100005; int tr[N]; int lowbit(int x) { return x&(-x); } void add(int x,int a) { for(int i=x;i<N;i+=lowbit(i)) tr[i]+= a; } int sum(int x) { int ans=0; for(int i=x;i;i-=lowbit(i)) ans+=tr[i]; return ans; } void bs(int a,int k) { int l=a+1,r=N; int temp=sum(a); while(l<=r) { int mid=l+r>>1; if(sum(mid)-temp<k) l=mid+1; else //有点懵 r=mid-1; } if(l>=N) printf("Not Find!\n"); else printf("%d\n",l); } int main() { int m; while(~scanf("%d",&m)) { memset(tr,0,sizeof tr); while(m--) { int q,a,k; scanf("%d",&q); if(q==0) { scanf("%d",&a); add(a,1); } else if(q==1) { scanf("%d",&a); //如果存在 if(sum(a)-sum(a-1)) add(a,-1); else printf("No Elment!\n"); } else { scanf("%d%d",&a,&k); bs(a,k); } } } return 0; }
KiKi's K-Number HDU - 2852 树状数组+二分
猜你喜欢
转载自www.cnblogs.com/QingyuYYYYY/p/12288894.html
今日推荐
周排行