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 }

原文地址:https://www.cnblogs.com/FengZeng666/p/11448005.html

时间: 2024-11-13 00:17:58

I Hate It HDU - 1754 (线段树)的相关文章

HDU(1754),线段树,单点替换,区间最值

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include <stdio.h> #include <algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn = 200010; int MAX

B - I Hate It HDU 1754 线段树

B - I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1754 Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. Input 本题

HDU 1754线段树基本操作,建树,更新,查询

代码线段树入门整理中有介绍. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 const int MAXNODE=1<<19; 7 const int MAX=1000003; 8 struct NODE{ 9 int left,right; 10 int value; 11 }node[

hdu 1754 线段树 水题 单点更新 区间查询

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 59558    Accepted Submission(s): 23201 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要

hdu 1754 线段树 单点更新 动态区间最大值

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 52417    Accepted Submission(s): 20598 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的

B - I Hate It HDU - 1754 线段树区间最大值板子(单点更新,区间最大)

第一次打 改了半天  各种小错误 难受 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int maxn=2000000+7; 5 int a[maxn],n; 6 struct Node{ 7 int l,r; 8 long long Max,lazy; 9 void update(long long val){ 10 ;//本题没用 11 } 12 }tree[maxn*5]; 13

HDU 4893 线段树裸题

Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2512    Accepted Submission(s): 751 Problem Description Recently, Doge got a funny birthday present from his new friend, Pro

HDU 4902 线段树(区间更新)

Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 353    Accepted Submission(s): 169 Problem Description There is an old country and the king fell in love with a devil. The devil alw

hdu 4893 线段树 --- 也是两个变 类似双标记

http://acm.hdu.edu.cn/showproblem.php?pid=4893 开始的时候,我按双标记,WA了一下午,搞不定,我是用的两个标记add--表示当前结点中有值发生变化,flag,斐波那契的懒惰标记,但是估计是我自己处理的有问题,一直不对 参考了别人的代码,写法还是很不错的,Add变量维护的是,完全变成Fibonacci的时候的和,---回头我再重新写一遍 #include <cstdio> #include <cstring> #include <a