zoukankan      html  css  js  c++  java
  • HDU 4417

    先来一个离线版本的线段树:

      1 /*
      2 ID:esxgx1
      3 LANG:C++
      4 PROG:hdu4417
      5 */
      6 #include <cstdio>
      7 #include <cstring>
      8 #include <iostream>
      9 #include <algorithm>
     10 using namespace std;
     11 
     12 #define MAXN    100007
     13 
     14 int v[MAXN * 4];
     15 
     16 #define recursive_def    int l, int r, int i
     17 #define lsi        i<<1
     18 #define rsi        i<<1 | 1
     19 #define lsn        l, m, lsi
     20 #define rsn        m+1, r, rsi
     21 #define pushup    v[i] = v[lsi] + v[rsi];
     22 
     23 void build(recursive_def)
     24 {
     25     v[i] = 0;
     26     if (l == r) return;
     27     else {
     28         int m = (l+r) >> 1;
     29         build(lsn);
     30         build(rsn);
     31     }
     32 }
     33 
     34 void update(int x, recursive_def)
     35 {
     36     if (l == r) v[i] += 1;
     37     else {
     38         int m = (l+r) >> 1;
     39         if (x <= m) update(x, lsn);
     40         else update(x, rsn);
     41         pushup
     42     }
     43 }
     44 
     45 int query(int L, int R, recursive_def)
     46 {
     47     if (L <= l && r <= R) return v[i];
     48     int m = (l+r) >> 1;
     49     int rslt;
     50     if (L <= m) rslt = query(L, R, lsn);
     51     else rslt = 0;
     52 
     53     if (m < R) rslt += query(L, R, rsn);
     54     return rslt;
     55 }
     56 
     57 struct A{
     58     int x, h;
     59 } brick[MAXN];
     60 
     61 int cmp1(const A &a, const A &b)
     62 {
     63     return a.h < b.h;
     64 }
     65 
     66 #define MAXM    100007
     67 
     68 struct B{
     69     int L, R, H, d, cnt;
     70 } qs[MAXM];
     71 
     72 int cmp2(const B &a, const B &b)
     73 {
     74     return a.H < b.H;
     75 }
     76 
     77 int cmp3(const B &a, const B &b)
     78 {
     79     return a.d < b.d;
     80 }
     81 
     82 int main(void)
     83 {
     84     #ifndef ONLINE_JUDGE
     85     freopen("in.txt", "r", stdin);
     86     #endif
     87     int T;
     88     scanf("%d", &T);
     89     for(int t=1; t<=T; ++t) {
     90         int N, M;
     91         printf("Case %d:
    ", t);
     92         scanf("%d%d", &N, &M);
     93         for(int i=0; i<N; ++i) {
     94             scanf("%d", &brick[i].h);
     95             brick[i].x = i;
     96         }
     97         sort(brick, brick + N, cmp1);
     98         for(int i=0; i<M; ++i) {
     99             scanf("%d%d%d", &qs[i].L, &qs[i].R, &qs[i].H);
    100             qs[i].d = i;
    101         }
    102         sort(qs, qs+M, cmp2);
    103         build(0, N-1, 1);
    104         int bb = 0;
    105         for(int i=0; i<M; ++i) {
    106             while(brick[bb].h <= qs[i].H) {
    107                 update(brick[bb].x, 0, N-1, 1);
    108                 if (++bb >= N) break;
    109             }
    110             qs[i].cnt = query(qs[i].L, qs[i].R, 0, N-1, 1);
    111         }
    112         sort(qs, qs+M, cmp3);
    113         for(int i=0; i<M; ++i)
    114             printf("%d
    ", qs[i].cnt);
    115     }
    116     return 0;
    117 }
    2014-07-25 19:50:07 Accepted 4417 265MS 3100K 1980 B G++
  • 相关阅读:
    poj2411
    poj2403
    poj2479
    poj2593
    跟着B站UP主小姐姐去华为坂田基地采访扫地僧
    云小课 | 不小心删除了数据库,除了跑路还能咋办?
    GaussDB(for MySQL)如何在存储架构设计上做到高可靠、高可用
    华为侯金龙:打造行业智能体,共建全场景智慧
    华为轮值董事长郭平2020全联接大会主题演讲:永远面向阳光,阴影甩在身后
    【API进阶之路】太秃然了,老板要我一周内检测并导入一万个小时的视频
  • 原文地址:https://www.cnblogs.com/e0e1e/p/hdu_4417.html
Copyright © 2011-2022 走看看