标签:des style blog color io os ar for strong
Description
Input
Output
Sample Input
3 1 2 0 3 3 4 0
Sample Output
1 0 0
思路:首先按照e值从大到小排序,然后为了保证ei-si>ej-sj,所以在排序函数那边注意一下,然后就是典型的树状数组的应用,每次插入的时候查找
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 100005; struct Cow { int s, e, num; bool operator <(const Cow &tmp) const { if (e != tmp.e) return e > tmp.e; return s < tmp.s; } } cow[maxn]; int c[maxn], total[maxn], n, Max; int lowbit(int x) { return x & (-x); } void Add(int x) { while (x <= Max) { c[x] += 1; x += lowbit(x); } } int sum(int x) { int ans = 0; while (x > 0) { ans += c[x]; x -= lowbit(x); } return ans; } int main() { while (scanf("%d", &n) != EOF && n) { memset(c, 0, sizeof(c)); memset(total, 0, sizeof(total)); Max = 0; for (int i = 1; i <= n; i++) { scanf("%d%d", &cow[i].s, &cow[i].e); cow[i].s++, cow[i].e++; cow[i].num = i; Max = max(Max, cow[i].s); } sort(cow+1, cow+1+n); for (int i = 1; i <= n; i++) { Add(cow[i].s); if (i > 1 && cow[i].s == cow[i-1].s && cow[i].e == cow[i-1].e) total[cow[i].num] = total[cow[i-1].num]; else total[cow[i].num] = sum(cow[i].s) - 1; } for (int i = 1; i < n; i++) printf("%d ", total[i]); printf("%d\n", total[n]); } return 0; }
标签:des style blog color io os ar for strong
原文地址:http://blog.csdn.net/u011345136/article/details/40224515