#include #include typedef long long int int64; int cmp(const void *a,const void *b){ int64 p=*(int64 *)a; int64 q=*(int64 *)b; return p==q?0:p1){ int m=(r+l)/2; if(za[m]<=v){ l=m; } else { r=m; } } return l; } void add(int *bit,int index,int a){ int n=bit[0]; int i; for(i=index;i<=n;i+=i&-i) bit[i]+=a; return; } int sum(int *bit,int index){ int res=0; int i; for(i=index;i>0;i-=i&-i) res+=bit[i]; return res; } int lowerBound(int *bit,int w){ int n=bit[0]; int x=0; int k=1; while(2*k<=n) k*=2; while(k>0){ if(x+k<=n && bit[x+k]=0){ add(bit,toIndex(v[i]),1); } else if(sum(bit,len)