POJ 2352 Stars(树状数组)
思路:
(刚开始想歪了,想着先离散然后用二维BIT来做,结果内存根本hold不住QAQ)
这道题既然是按y
升序给我们的序列,我们在遍历到这个序列时,查一下有多少x
小于我们当前的x
就ok了,区间求和、单点修改自然用树状数组最方便了~
代码:
#include<iostream>
using namespace std;
const int maxn=15000+5;
const int maxc=32000+5;
int n,bit[maxc],res[maxn];
#define lowbit(i) (i&-i)
void add(int i){
while(i<maxc) bit[i]++,i+=lowbit(i);
}
int sum(int i){
int s=0;
while(i>0) s+=bit[i],i-=lowbit(i);
return s;
}
void solve(){
int x,y;
for(int i=0;i<n;i++){
scanf("%d%d",&x,&y);
res[sum(++x)]++;
add(x);
}
for(int i=0;i<n;i++) printf("%d\n",res[i]);
}
int main(){
// freopen("Arutoria.txt","r",stdin);
scanf("%d",&n);
solve();
return 0;
}