//统计左侧的星星数目就是树状数组模型
//因为已经按照y坐标排序了
//统计前面有多少个数的问题
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
static const int size = 32010;
static const int N = 15010;
static int x;
static int c[size];
static int level[N];
static int lowbit(int x){
return x&(-x);
}
static void add(int k){
while(k<=size){
c[k]++;
k+=lowbit(k);
}
}
static int sum(int k){
int sum=0;
while(k>0){
sum+=c[k];
k-=lowbit(k);
}
return sum;
}
int main(){
int n,y;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++) level[i]=0;
memset(c,0,sizeof(c));
//因为已经按照Y坐标和x排序了
//仿照逆序数对书写
for (int i=0;i<n;i++){
scanf("%d%d",&x,&y);
//表示前面有多少个等级就为多少
level[sum(x+1)]++;
add(x+1);
}
for(int i=0;i<n;i++){
printf("%d\n",level[i]);
}
}
return 0;
}
POJ2352树状数组入门统计前面有多少个数与求逆序数对类似
最新推荐文章于 2022-07-27 10:14:18 发布