题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541
hdu1541——Stars
二维偏序问题。之前没想过树状数组能解决这样的问题,留个纪念,之后再写一篇洛谷的题洛谷P1020 导弹拦截
注意题目中input:y升序输入 这点非常关键
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 15002; const int range = 32002; int an***axn],c[range]; int lowbit(int x) { return x&-x; } void update(int x) { while(x<=range) { c[x]++; x+=lowbit(x); } } int query(int x) { int sum=0; while(x>0) { sum+=c[x]; x-=lowbit(x); } return sum; } int main() { int n,x,y; while(~scanf("%d",&n)) { memset(c,0,sizeof(c)); memset(ans,0,sizeof(ans)); for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); ans[query(x+1)]++; update(x+1); } for(int i=0;i<n;i++) printf("%d\n",ans[i]); } return 0; }