POJ2481Cows(树状数组)
来源:互联网 发布:网络光端机价格 编辑:程序博客网 时间:2024/05/17 05:57
题意:就是给出N个区间,问这个区间是多少个区间的真子集。
分析:关键在于排序的策略。一边固定类型的题目。
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const int maxn = 100005;int C[maxn], ans[maxn];struct Cow{ int low, high, index;}cow[maxn];bool cmp(Cow p, Cow q){ if(p.high == q.high) return p.low < q.low; return p.high > q.high;}int lowbit(int lo){ return lo & (-lo);}void modify(int pos, int value){ while(pos < maxn) { C[pos] += value; pos += lowbit(pos); }}int getsum(int pos){ int sum = 0; while(pos > 0) { sum += C[pos]; pos -= lowbit(pos); } return sum;}int main(){ int n; while(cin >> n && n) { for(int i = 1; i <= n; i++) { scanf("%d%d", &cow[i].low, &cow[i].high); cow[i].low++; //注意可能为0,所以加1 cow[i].index = i; } sort(cow + 1, cow + n + 1, cmp); memset(C, 0, sizeof(C)); ans[cow[1].index] = 0; modify(cow[1].low, 1); for(int i = 2; i <= n; i++) { if(cow[i-1].low == cow[i].low && cow[i].high == cow[i-1].high) ans[cow[i].index] = ans[cow[i-1].index]; else ans[cow[i].index] = getsum(cow[i].low); modify(cow[i].low, 1); } for(int i = 1; i < n; i++) printf("%d ", ans[i]); printf("%d\n", ans[n]); } return 0;}
0 0
- POJ2481Cows(树状数组)
- 树状数组poj2481cows
- poj2481Cows【树状数组】
- poj2481Cows
- poj2481Cows
- (转)树状数组
- 树状数组(转载)
- Stars(树状数组)
- 树状数组(interval)
- (转)树状数组
- 树状数组(2)
- 树状数组(3)
- 树状数组(4)
- 树状数组(5)
- 树状数组(6)
- poj2352Stars(树状数组)
- POJ2299(树状数组)
- hdu2492 (树状数组)
- 如何在网页中嵌入百度地图
- 在软件测试中不要做的六件事
- 【openjudge 计算概论(A)】[基础编程练习(运算成分)]
- 系统学习JavaWeb之八Session篇
- iOS __func__说明
- POJ2481Cows(树状数组)
- linux文件锁详解(设计文件很底层的操作)
- zkw Segment Tree
- 了jsp中四种传递参数的方法
- android中的ipc机制剖析
- poj之旅——1050
- jsp(对session监听)
- CCF 201612-1 最大波动 JAVA实现
- (仿超级课程表)结合MaterialSheetFab实现简单的课程表功能