标签:
/*
Author: 2486
Memory: 604 KB Time: 391 MS
Language: G++ Result: Accepted
Public: No
*/
//进行横坐标标注
//题目数据的输入已经确定,是先按照Y坐标升序,当y相等时,按照X坐标升序
//如此,在现在输入的数的X坐标之前已经是满足条件的数即只要是属于此时输入的数的左下角的所有星星个数之和就是他的等级
//通过树状数组可以快速的求解某个区间之前的所有数的和。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=32000+5;
int A[maxn],B[maxn],n,x,y;
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 add(int x,int d) {
while(x<maxn) {
A[x]+=d;
x+=lowbit(x);
}
}
int main() {
while(~scanf("%d",&n)) {
memset(B,0,sizeof(B));
memset(A,0,sizeof(A));
for(int i=0; i<n; i++) {
scanf("%d%d",&x,&y);
B[sum(++x)]++;
add(x,1);
}
for(int i=0; i<n; i++)printf("%d\n",B[i]);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq_18661257/article/details/46939957