码迷,mamicode.com
首页 > 其他好文 > 详细

(线段树) I Hate It --hdu--1754 (入门)

时间:2015-07-30 21:16:00      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1754

 

这次的代码和上个代码很相似,只不过上次的节点里存的是sum值,这次节点里存放的是Max, 正在慢慢找感觉

节点里保存的值是十分重要的!!!!

 

 

代码:

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 using namespace std;
 6 
 7 #define Lson r<<1
 8 #define Rson r<<1|1
 9 
10 const int N = 2*1e6+5;
11 
12 struct SegmentTree
13 {
14     int L, R;
15     int MAX;
16     int Mid()
17     {
18         return (R+L)>>1;
19     }
20 }a[N<<2];
21 
22 void BuildSegTree(int r, int L, int R)
23 {
24     a[r].L=L, a[r].R=R;
25 
26     if(L==R)
27     {
28         scanf("%d", &a[r].MAX);
29         return ;
30     }
31 
32     BuildSegTree(Lson, L, a[r].Mid());
33     BuildSegTree(Rson, a[r].Mid()+1, R);
34 
35     a[r].MAX = max(a[Lson].MAX, a[Rson].MAX);
36 }
37 
38 void Update(int r, int i, int e)
39 {
40     a[r].MAX = max(a[r].MAX, e);
41 
42     if(a[r].L==a[r].R)
43         return ;
44 
45     if(i<=a[r].Mid())
46         Update(Lson, i, e);
47     else if(i>a[r].Mid())
48         Update(Rson, i, e);
49 }
50 
51 int Query(int r, int L, int R)
52 {
53     if(a[r].L==L && a[r].R==R)
54         return a[r].MAX;
55 
56     if(R<=a[r].Mid())
57        return  Query(Lson, L, R);
58     else if(L>a[r].Mid())
59        return Query(Rson, L, R);
60     else
61     {
62         int Lsum = Query(Lson, L, a[r].Mid());
63         int Rsum = Query(Rson, a[r].Mid()+1, R);
64 
65         return max(Lsum, Rsum);
66     }
67 }
68 
69 int main()
70 {
71    int n, m;
72 
73    while(scanf("%d%d", &n, &m)!=EOF)
74    {
75        BuildSegTree(1, 1, n);
76 
77        char s[20];
78        int L, R, A, B;
79 
80        while(m--)
81        {
82            scanf("%s", s);
83            if(s[0]==Q)
84            {
85                scanf("%d%d", &L, &R);
86                printf("%d\n", Query(1, L, R));
87            }
88            else
89            {
90                scanf("%d%d", &A, &B);
91                Update(1, A, B);
92            }
93        }
94    }
95    return 0;
96 }

 

(线段树) I Hate It --hdu--1754 (入门)

标签:

原文地址:http://www.cnblogs.com/YY56/p/4690463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!