poj 2352

啊,这鬼畜的输入。
树状数组,排序后x坐标是从小到大的,所以维护y就行了。先查询,后更新。
要注意0,lowbit(0) = 0,就自然而然的TLE了

#include <cstdio>
#include <cstring>
#include <algorithm>
#define f first
#define s second
using namespace std;
typedef pair<int,int> PII;
const int N = 32010;
PII a[N]; 
int n,c[N],id[N],cnt[N];
inline int lowbit(int x){
	return x & (-x);
}
int sum(int x){
	int s = 0;
	while(x > 0){
		s += c[x];
		x -= lowbit(x);
	} 
	return s;
}
void add(int i,int x){
	while(i <= N){
		c[i] += x;
		i += lowbit(i);
	} 
}
int main(){
	while(~scanf("%d",&n)){
		for(int i = 0;i<n;i++) scanf("%d%d",&a[i].s,&a[i].f);
		sort(a,a+n);
		memset(c,0,sizeof(c));
		memset(cnt,0,sizeof(cnt));
		for(int i = 0;i<n;i++){
			cnt[sum(++a[i].s)]++;
			add(a[i].s,1);
		}
		for(int i = 0;i<n;i++) printf("%d\n",cnt[i]); 
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/winhcc/article/details/88904683