来源:
poj 2352 && hdu 1541 Stars
树状数组小题,以后会有分析,先上代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
const int MAXN=40000;
int a[MAXN];
int level[MAXN];
int lowbit(int x){//取幂
return x&(-x);
}
int sum(int x){
int cnt(0);
while(x>0){
cnt+=a[x];
x-=lowbit(x);
}
return cnt;
}
void change(int x){//向后更新
while(x<MAXN){
a[x]++;
x+=lowbit(x);
}
return ;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
memset(level,0,sizeof(level));
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
level[sum(x+1)]++;//这一块是关键
change(x+1);
}
for(int i=0;i<n;i++){
cout<<level[i]<<endl;
}
}
return 0;
}