Ural 1028 Stars(树状数组)
2017-10-10 22:22
429 查看
题目地址:http://acm.timus.ru/problem.aspx?space=1&num=1028
思路:
首先按坐标排序(先按x,后按y),按x从小到大依次处理,则点i下方的点的个数即为y坐标不大于改点的个数,使用树状数组维护即可。
思路:
首先按坐标排序(先按x,后按y),按x从小到大依次处理,则点i下方的点的个数即为y坐标不大于改点的个数,使用树状数组维护即可。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn=15000+50; struct Node { int x,y; }; int n; int c[maxn]; Node a[maxn]; int b[maxn],ans[maxn]; int cmp(Node a,Node b) { if(a.x==b.x) return a.y<b.y; else return a.x<b.x; } inline int lowbit(int x) { return x&(-x); } int sum(int x) { int tot=0; while(x>0) { tot+=c[x]; x-=lowbit(x); } return tot; } void add(int x,int num) { while(x<=n) { c[x]+=num; x+=lowbit(x); } } int main() { scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d%d",&a[i].x,&a[i].y); b[i]=a[i].y; } sort(b,b+n); int cnt=unique(b,b+n)-b; sort(a,a+n,cmp); for(int i=0; i<n; i++) { int x=lower_bound(b,b+n,a[i].y)-b+1; ans[sum(x)]++; add(x,1); } for(int i=0; i<n; i++) { printf("%d\n",ans[i]); } return 0; }
相关文章推荐
- Ural 1028. Stars(树状数组)
- ural1028 Stars (树状数组)
- Ural_1028. Stars(数状数组)
- ural 1028【树状数组】
- POJ 2352 Stars 【树状数组】
- HDU1541 Stars (树状数组)
- poj - 2352 - Stars(树状数组)
- 【POJ】【P2352】【Stars】【题解】【树状数组】
- POJ 2352 Stars (树状数组)
- hdu 1541 Stars(树状数组)
- HDU 1541 Stars 树状数组
- poj 2325 Stars(树状数组)
- HDU 1541 Stars(树状数组)
- 【Ural1028】Stars-线段树和树状数组入门题
- POJ 2352 HDU1541 Stars(树状数组)
- hdu1541-Stars(树状数组)
- POJ 2352 Stars(树状数组)
- poj 2352 Stars(树状数组)
- (模板题)poj 2352 Stars(树状数组)
- URAL 1707. Hypnotoad's Secret(树状数组)