I Hate It HDU - 1754 (线段树)

Posted fengzeng666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I Hate It HDU - 1754 (线段树)相关的知识,希望对你有一定的参考价值。

技术图片

 

 

注意点:scanf中使用%c时,会读取空格和回车,所以在%c之前要有一个空格 ( 或者直接使用%s也行,%s会忽略空格和回车 )。具体见下面的代码:

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<cmath>
 5 #include<set>
 6 #include<algorithm>
 7 #include<cstdio>
 8 #include<map>
 9 #include<cstring>
10 #include<list>
11 
12 #define MAXSIZE 200010
13 
14 using namespace std;
15 
16 int N, M;
17 int tree[4*MAXSIZE];
18 int ans = -1;
19 
20 void init()
21 
22     memset(tree, 0, sizeof(tree));
23 
24 
25 
26 void build(int node, int l, int r)
27 
28     if(l == r)
29     
30         scanf("%d", &tree[node]);
31         return;
32     
33     int mid = (l+r)/2;
34     build(node*2, l, mid);
35     build(node*2+1, mid+1, r);
36     
37     tree[node] = max(tree[node*2], tree[node*2+1]);
38 
39 
40 // 单点更新 
41 void update(int node, int l, int r, int index, int n)
42 
43     if(l == r)
44     
45         tree[node] = n;
46         return;
47     
48     int mid = (l+r)/2;
49     if(index <= mid)
50         update(node*2, l, mid, index, n);
51     else
52         update(node*2+1, mid+1, r, index, n);
53         
54     tree[node] = max(tree[node*2], tree[node*2+1]);
55 
56 
57 
58 // 区间查询 
59 int query_range(int node, int l, int r, int L, int R)
60 
61     if(l <= L && r >= R)
62         return tree[node];
63     int mid = (L+R)/2;
64     if(l <= mid)
65         ans = max(ans, query_range(node*2, l, r, L, mid));
66     if(mid < r)
67         ans = max(ans, query_range(node*2+1, l, r, mid+1, R));
68     
69     return ans;
70 
71 
72 int main()
73     
74     while(scanf("%d%d", &N, &M) != EOF)
75     
76         init();
77         build(1,1,N);
78         for(int j = 0; j < M; ++j)
79         
80             char c;
81             int a, b;
82             scanf(" %c%d%d", &c, &a, &b);    // scanf中%c会读取空格和回车,所以在%c前面加一个空格 
83             if(c == Q)
84             
85                 printf("%d\\n", query_range(1, a, b, 1, N));
86                 ans = -1;
87             
88             else if(c == U)
89                 update(1, 1, N, a, b); 
90         
91     
92 
93     return 0;
94 

 

以上是关于I Hate It HDU - 1754 (线段树)的主要内容,如果未能解决你的问题,请参考以下文章

HDU-1754 I Hate It(线段树)

hdu 1754 I Hate It 线段树 点改动

线段树模板hdu 1754:I Hate It

hdu1754 I hate it (线段树)

HDU - 1754 I Hate It (线段树区间求最值)

HDU1754 I hate it(线段树 单点修改)