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

链接:

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 }
时间: 2024-10-06 16:15:46

(线段树) I Hate It --hdu--1754 (入门)的相关文章

线段树 + 区间更新: HDU 4893 Wow! Such Sequence!

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

线段树(成段更新) HDU 1698 Just a Hook

题目传送门 1 /* 2 线段树-成段更新:第一题!只要更新区间,输出总长度就行了 3 虽然是超级裸题,但是用自己的风格写出来,还是很开心的:) 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cmath> 8 #include <cstring> 9 #include <string> 10 #include <iostream> 11 using namesp

gcd(线段树离线处理)——HDU 4630

对应HDU题目:点击打开链接 No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1801    Accepted Submission(s): 770 Problem Description Life is a game,and you lose it,so you suicide. But you can

线段树成段更新 hdu 1698 Just a Hook

题意:给出n根金属棒,和操作数q,初始时每个金属棒价值都为1,每次操作可以把从x到y的金属棒更换材质,铜为1,银为2,金为3,最后统计所有的金属棒总价值是多少. 线段树成段更新,需要用到lazy标记,所谓lazy标记就是:更新一个区间的时候不更新到底,只更新到第一个满足更新范围的区间(即范围内的最大的区间),然后给节点加上lazy标记,以后需要更新到该节点的子节点的时候,就把lazy标记转移到子节点上,这样大大提升了效率. 代码:

(线段树区间更新)hdu 1689

Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 18759    Accepted Submission(s): 9414 Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing f

线段树-&gt;面积并 Atlantis HDU - 1542

题目链接:https://cn.vjudge.net/problem/HDU-1542 题目大意:求面积并 具体思路:我们首先把矩形分割成一横条一横条的,然后对于每一个我们给定的矩形,我们将储存两个点,一个是左下角,一个是右上角.对于左下角的点,我们将他标记为-1,对于右上角的点,我们把它标记成1,-1代表这块区域的面积是需要减去的,1代表这块区域的面积是需要加上的,然后我们通过扫描线的形式,从y轴从下往上扫就可以了. 离散化的过程,数组还是尽量从0开始吧,因为在更新的过程中会出现0的情况,如果

HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)

http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便,我们将小时换成分钟,那么一天24小时,总共有1440分钟.顾我就可以把一天里的任意HH:MM时间换成分钟.就这样一天的时间就变成[0,1440]区间了. 因为所给的活动最多是5*10^5,如果把活动的时间在线段[0,1440]都修改,那么时间的复杂度最坏是O(5*10^5*1440). (1)方法一

hdu 1754:I Hate It(线段树,入门题,RMQ问题)

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

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

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