struct bit{ int c[maxn] ; void init(){ memset(c , 0 ,sizeof(c)); } int lowbit(int x){ return x&(-x); } void add(int x ,int d){ //在x处加上d for( ; x < maxn ; x+=lowbit(x)) c[x]+=d ; } int sum(int x){ //求小于等于x的个数 int ans = 0 ; for( ; x>0 ; x-=lowbit(x)) ans +=c[x] ; return ans ; } int getkth1(int k){// 求第K小数模版1 int ans = 0 , cnt = 0 , i ; for(i = 20 ; i>=0 ; --i){ ans += 1<<i ; if(ans>=maxn||cnt+c[ans]>=k) ans-=1<<i ; else cnt +=c[ans] ; } return ans+1 ; } int getkth2(int k){//求第K小数模版2 int l=0,r=maxn,mid,f; while(l<r-1) { mid=(l+r)>>1; f=sum(mid); if(f>=k) r=mid; else l=mid; } return r; } };
树状数组模版
最新推荐文章于 2023-11-07 20:27:23 发布