POJ-2481-Cows
2015-08-22 14:58
253 查看
//树状数组
给你一些区间,问,对于给出的每个区间,有多少个区间是完全包含它的。
先将S从小到大排序,E从大到小排序,这样就可以保证在放入一个区间里,前面所以放下的区间的左端点都是小于等于它的。那么,这时候查询,有多少个区间的右端点是大于等于它的右端点的,就可以得出答案。
需要注意的是,在查询的时候,如果当前区间和前面一个区间是完全相同的话,那么直接将前面的区间得到的答案赋给它就可以,不然,查询大于等于它的右端点的数目。
AC代码:
给你一些区间,问,对于给出的每个区间,有多少个区间是完全包含它的。
先将S从小到大排序,E从大到小排序,这样就可以保证在放入一个区间里,前面所以放下的区间的左端点都是小于等于它的。那么,这时候查询,有多少个区间的右端点是大于等于它的右端点的,就可以得出答案。
需要注意的是,在查询的时候,如果当前区间和前面一个区间是完全相同的话,那么直接将前面的区间得到的答案赋给它就可以,不然,查询大于等于它的右端点的数目。
AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 100005 int a[N]; int c[N]; int n; struct node { int star,end,id; } ant[N]; int cmp(node p,node q) { if(p.end==q.end) { return p.star<q.star; } else { return p.end>q.end; } } int lower_bit(int i) { return i&(-i); } void add(int i,int v) { while(i<=n) { a[i]+=v; i+=lower_bit(i); } } int sum(int i) { int s=0; while(i>0) { s+=a[i]; i-=lower_bit(i); } return s; } int main() { while(scanf("%d",&n)!=EOF&&n) { int i; memset(c,0,sizeof(c)); memset(a,0,sizeof(a)); for(i=0; i<n; i++) { scanf("%d%d",&ant[i].star,&ant[i].end); ant[i].star++; ant[i].end++; ant[i].id=i; } sort(ant,ant+n,cmp); for(i=0; i<n; i++) { if(i>0&&ant[i].star==ant[i-1].star&&ant[i].end==ant[i-1].end) { c[ant[i].id]=c[ant[i-1].id]; } else { c[ant[i].id]=sum(ant[i].star); } add(ant[i].star,1); } for(i=0; i<n; i++) { if(i==0) { printf("%d",c[i]); } else { printf(" %d",c[i]); } } printf("\n"); } return 0; }
相关文章推荐
- [LeetCode] Plus One
- 为什么在子线程中直接new Handler会报错?
- HDU-1087 Super Jumping! Jumping! Jumping!(LIS)
- 位运算
- CRB and String(字符串想法规律题)
- Linux文件系统索引节点inode详解
- LNMP(PHP-FPM)
- POJ---1470- Closest Common Ancestors
- Boring count(字符串处理)
- 事件
- Boring count(字符串处理)
- UVA 11922 Permutation Transformer (Splay树)
- 使用Visual Studio 快速把 Json,Xml 字符串创建为一个实体类
- LNMP高级配置
- PAT 1059. Prime Factors (25)
- I-- ytaaa(FZU--2177
- php对象工厂类
- 创建了远程账号仍然无法远程mysql的问题
- 关于having 1=1 和group by 爆表的思考和总结
- 四 FZU 2089