首页 > 代码库 > 【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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。