与静态二叉排序树的一个重要的区别是,这棵树能高效的处理区间问题,很灵活的数据结构

    POJ3263 Tallest Cow

    http://acm.pku.edu.cn/JudgeOnline/problem?id=3263

    由于在区间[u , v]内,区间[u + 1 , v - 1]里的值必小于它,所以可以对[u + 1 , v - 1]区间增加1,表示在某个区间内,最大值必须减少1,所以这里要处理数据中重复的区间,例如 [3 , 7] , [3 , 7]这种数据,利用线段树实现成段区间增加。最后,对于每个下标,H - 该下标的值,就为答案。

代码
1 #include <cstdio>
2 #include <algorithm>
3  using namespace std;
4
5  #define lson(x) (x << 1)
6 #define rson(x) (x << 1) + 1
7
8 const int maxn = 10001;
9
10 struct node {
11 int l, r, val;
12 } tt[maxn * 20];
13
14 struct pos {
15 int x, y;
16 bool operator < (const pos t) const {
17 if(x == t.x)
18 return y < t.y;
19 return x < t.x;
20 }
21 } a[maxn];
22
23 int N, I, H, R;
24
25 void built(int l, int r, int now)
26 {
27 tt[now].l = l;
28 tt[now].r = r;
29 tt[now].val = 0;
30 int m = (l + r) >> 1;
31 if(l < r) {
32 built(l, m, lson(now));
33 built(m + 1, r, rson(now));
34 }
35 }
36
37 void insert(int l, int r, int now, int key)
38 {
39 if(tt[now].l == l && tt[now].r == r) {
40 tt[now].val += key;
41 } else {
42 int m = (tt[now].l + tt[now].r) >> 1;
43 if(r <= m)
44 insert(l , r, lson(now), key);
45 else if(l > m)
46 insert(l , r, rson(now), key);
47 else {
48 insert(l , m, lson(now), key);
49 insert(m + 1, r, rson(now), key);
50 }
51 }
52 }
53
54 int find(int x, int now)
55 {
56 int sum = 0;
57 if(tt[now].r == tt[now].l)
58 return tt[now].val;
59 else
60 sum = tt[now].val;
61 int m = (tt[now].l + tt[now].r) >> 1;
62 if(x > m)
63 return sum + find(x , rson(now));
64 else
65 return sum + find(x , lson(now));;
66 }
67
68 int main()
69 {
70 scanf("%d %d %d %d", &N, &I, &H, &R);
71 built(1 , N , 1);
72
73 for(int i=0; i < R; i++)
74 scanf("%d %d", &a[i].x, &a[i].y);
75 sort(a , a + R);
76
77 int u = -1, v = -1;
78 for(int i=0; i < R; i++) {
79
80 if(u == a[i].x && v == a[i].y)
81 continue;
82
83 u = a[i].x , v = a[i].y;
84 if(abs(u - v) == 1)
85 continue;
86 int st = min(u , v) + 1;
87 int et = max(u , v) - 1;
88
89 insert(st, et, 1, 1);
90 }
91 for(int i=1; i <= N; i++)
92 printf("%d\n", H - find(i , 1));
93 return 0;
94 }

 

 

   

   

posted on 2010-05-23 16:31  xIao.wU 思维磁场  阅读(200)  评论(0编辑  收藏  举报