zoukankan      html  css  js  c++  java
  • 【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 100005
    10 
    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_JUDGE
    48         freopen("data.in", "r", stdin);
    49     #endif
    50     
    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         // discretization
    66         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:
    ", 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
    ", k);
    83         }
    84     }
    85     
    86     return 0;
    87 }
  • 相关阅读:
    笔记
    BlangenOA项目展示(附源码)
    笔记截至20190406
    ASP.NET MVC 使用过滤器需要注意
    单例模式和HttpContext线程内唯一
    C#线程/进程同步(lock、Mutex、Semaphore)
    Web标准
    JavaScript 放置在文档最后面可以使页面加载速度更快
    GUI 面板实现 (解决了关闭事件)
    GUI 实现多个窗口 (使用封装特性)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4204669.html
Copyright © 2011-2022 走看看