首页 > 代码库 > 【HDOJ】4325 Flowers

【HDOJ】4325 Flowers

树状数组+离散化的题目,一直在思考为什么结果不一样,后来才发现花开了就是开了不会再谢了。

 1 /* 4325 */ 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <algorithm> 7 using namespace std; 8  9 #define MAXN 10000510 11 typedef struct {12     int s, t;13 } node_t;14 15 node_t nodes[MAXN];16 int qi[MAXN];17 int buf[MAXN*4];18 int sum[MAXN];19 20 inline int lowbit(int x) {21     return -x&x;22 }23 24 void update(int i, int v, int n) {25     while (i <= n) {26         sum[i] += v;27         i += lowbit(i);28     }29 }30 31 int query(int i) {32     int ret = 0;33     34     while (i) {35         ret += sum[i];36         i -= lowbit(i);37     }38     39     return ret;40 }41 42 int main() {43     int t, n, m, l;44     int i, j, k, tmp;45     int a, b, c;46     47     #ifndef ONLINE_JUDGE48         freopen("data.in", "r", stdin);49     #endif50     51     scanf("%d", &t);52     for (int tt=1; tt<=t; ++tt) {53         scanf("%d %d", &n, &m);54         l = 0;55         for (i=0; i<n; ++i) {56             scanf("%d %d", &nodes[i].s, &nodes[i].t);57             buf[l++] = nodes[i].s;58             buf[l++] = nodes[i].t;59         }60         for (i=0; i<m; ++i) {61             scanf("%d", &qi[i]);62             buf[l++] = qi[i];63         }64         65         // discretization66         buf[l++] = 0;67         sort(buf, buf+l);68         c = unique(buf, buf+l) - buf;69         70         memset(sum, 0, sizeof(sum));71         for (i=0; i<n; ++i) {72             a = lower_bound(buf, buf+c, nodes[i].s) - buf + 1;73             b = lower_bound(buf, buf+c, nodes[i].t) - buf + 1;74             update(a, 1, c);75             update(b+1, -1, c);76         }77         78         printf("Case #%d:\n", tt);79         for (i=0; i<m; ++i) {80             j = lower_bound(buf, buf+c, qi[i]) - buf + 1;81             k = query(j);82             printf("%d\n", k);83         }84     }85     86     return 0;87 }

 

【HDOJ】4325 Flowers