树状数组——pku2481
2011-07-16 15:53
281 查看
先按s从小到大排序
若相同再按E从大到小
在点相同时要特殊处理
View Code
若相同再按E从大到小
在点相同时要特殊处理
View Code
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n; int tree[200009]; int all[200009]; int temp[200009]; struct data { int l,r; int no; }node[200009]; int lowbit(int x) { return x&(-x); } void updata(int x,int c) { int i; for(i=x;i<=n;i+=lowbit(i)) { tree[i]+=c; } } int getsum(int x) { int i; int temp=0; for(i=x;i>=1;i-=lowbit(i)) { temp+=tree[i]; } return temp; } int cmp(data a,data b) { if(a.l==b.l) return a.r>b.r; else return a.l<b.l; } int main() { n=100000; int t; while(scanf("%d",&t),t) { int i; for(i=1;i<=100000;i++) { tree[i]=0; all[i]=0; } for(i=1;i<=t;i++) { scanf("%d%d",&node[i].l,&node[i].r); node[i].no=i; } sort(&node[1],&node[t+1],cmp); for(i=1;i<=t;i++) { if(node[i].l!=node[i-1].l||node[i].r!=node[i-1].r)//如果改点与前面的不同 all[i]=getsum(n)-getsum(node[i].r-1); else//若相同的话 all[i]=all[i-1]; updata(node[i].r,1); } for(i=1;i<=t;i++) { temp[node[i].no]=all[i]; } printf("%d",temp[1]); for(i=2;i<=t;i++) { printf(" %d",temp[i]); } printf("\n"); } }
相关文章推荐
- pku 2481 Cows(树状数组)
- POJ 2481 Cows(树状数组)
- POJ 2481 Cows【树状数组】
- poj 2481 Cows(树状数组)
- 树状数组 之 poj 2481
- poj 2481 Cows(树状数组)题目有陷阱,转换后与stars类似
- POJ-2481-COWS(树状数组)
- poj 2481 Cows (树状数组)
- POJ_2481_树状数组
- POJ 题目2481 Cows(树状数组)
- POJ 2481 Cows 【树状数组】
- POJ 2481 Cows 树状数组
- POJ - 2481 Cows(树状数组)
- 【树状数组】PKU-2152-Fire
- poj 2481 Cows 树状数组
- poj 2481 - Cows(树状数组)
- poj 2481 Cows (树状数组 +1 p2352 妙用加深~)
- POJ 2481 Cows(树状数组)
- PKU 2299 求解逆序数(使用归并或者树状数组) 树状数组及入门知识
- POJ 2481 Cows【树状数组】