标签: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