第k小的数字 树状数组
View Code
1 #include2 #include 3 #define maxn 200005 4 using namespace std; 5 int c[maxn],p[maxn],a[maxn]; 6 int N,M,C; 7 void add(int x,int num) 8 { 9 while(x<=N) 10 { 11 c[x]+=num; 12 x+=(x&-x); 13 } 14 } 15 int find(int x) 16 { 17 if(x==p[x]) return x; 18 else p[x]=find(p[x]); 19 return p[x]; 20 } 21 int find_k(int k) 22 { 23 int ans=0,cnt=0; 24 for(int i=19;i>=0;i--) 25 { 26 ans+=(1< =N||cnt+c[ans]>=k) 28 ans-=(1<