| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
超时TLE!怎么办?#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
#define MAXN 100100
int n, c[MAXN];
struct node {
int id, s, e, pos, ans;
}d[MAXN];
bool cmp1(node x, node y) {
return x.s < y.s;
}
bool cmp2(node x, node y) {
if (x.e == y.e) return x.s < y.s;
else return x.e > y.e;
}
bool cmp3(node x, node y) {
return x.pos < y.pos;
}
int lowbit(int x) {
return x&(x ^ (x - 1));
}
void change(int i, int data) {
c[i] += data;
for (; i <= n; i += lowbit(i)) c[i] += data;
}
int sum(int i) {
int s = 0;
for (; i; i -= lowbit(i)) s += c[i];
return s;
}
int main() {
while (scanf("%d", &n) != EOF) {
if (n == 0) break;
memset(d, 0, sizeof(d));
for (int i = 1; i <= n; i++) {
scanf("%d%d", &d[i].s, &d[i].e);
d[i].s++, d[i].e++;
d[i].pos = i;
}
sort(d + 1, d + n + 1, cmp1);
int cnt = 1;
d[1].id = cnt;
for (int i = 2; i <= n; i++) {
if (d[i].s == d[i - 1].s) d[i].id = cnt;
else d[i].id = ++cnt;
}
sort(d + 1, d + n + 1, cmp2);
for (int i = 1; i <= n; i++) {
if (i > 1) {
if (d[i].s == d[i - 1].s && d[i].e == d[i - 1].e) d[i].ans = d[i - 1].ans;
else d[i].ans = sum(d[i].id);
}
change(d[i].id, 1);
}
sort(d + 1, d + n + 1, cmp3);
for (int i = 1; i <= n; i++) printf("%d ", d[i].ans);
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator