给定N个正整数序列,对序列中每个数,求出序列中它左边比它小的数的个数
#include <stdio.h>
#include <stdlib.h>
#define N 6
#define lowbit(i) (i&(-i))
int C[N];
void update(int x,int v);
int getsum(int x);
int main(void) {
int A[N]={0,2,5,1,3,4};
int i;
for(i=1;i<N;i++){
update(A[i],1);
printf("%d %d\n",i,getsum(A[i]-1));//比它小,一定要-1,否则为小于等于
}
return 0;
}
void update(int x,int v){
int i;
for(i=x;i<=N;i+=lowbit(i)){
C[i]+=v;
}
}
int getsum(int x){
int i,sum=0;
for(i=x;i>0;i-=lowbit(i)){
sum+=C[i];
}
return sum;
}