HDU 1754 I Hate It 线段树 单点更新 区间最大值

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 #include<cstdio>
 6 #include<set>
 7 #include<map>
 8 #include<vector>
 9 #include<cstring>
10 #include<stack>
11 #include<cmath>
12 #include<queue>
13 #include <bits/stdc++.h>
14 using namespace std;
15
16 int MAX[4000001];
17 //int max(int a,int b)
18 //{
19 //    return a>b?a:b;
20 //}
21 void pushup(int rt)
22 {
23     MAX[rt]=max(MAX[rt<<1],MAX[(rt<<1)+1]);
24 }
25 void build(int l,int r,int rt)
26 {
27     if(l==r)
28     {
29         scanf("%d",&MAX[rt]);
30         return;
31     }
32     int m=(l+r)>>1;
33     build(l,m,rt<<1);
34     build(m+1,r,(rt<<1)+1);
35     pushup(rt);
36 }
37 void update(int p,int q,int l,int r,int rt)
38 {
39     if(l==r)
40     {
41         MAX[rt]=q;
42         return;
43     }
44     int m=(l+r)>>1;
45     if(p<=m)
46         update(p,q,l,m,rt<<1);
47     else
48         update(p,q,m+1,r,(rt<<1)+1);
49     pushup(rt);
50 }
51 int getmax(int L,int R,int l,int r,int rt)
52 {
53     if(L<=l&&r<=R)
54         return MAX[rt];
55     int m=(r+l)>>1;
56     int ret=0;
57     if(L<=m)
58         ret=max(ret,getmax(L,R,l,m,rt<<1));
59     if(R>m)
60         ret=max(ret,getmax(L,R,m+1,r,(rt<<1)+1));
61     return ret;
62 }
63 int main()
64 {
65     int n,m,a,b,i;
66     char c;
67     while(~scanf("%d %d",&n,&m))
68     {
69         build(1,n,1);
70         for(i=0; i<m; i++)
71         {
72             scanf("%*c%c%d %d",&c,&a,&b);//*c与getchar一样
73             if(c==‘Q‘)
74                 printf("%d\n",getmax(a,b,1,n,1));
75             else
76                 update(a,b,1,n,1);
77         }
78     }
79     return 0;
80 }

时间: 2024-12-20 08:12:43

HDU 1754 I Hate It 线段树 单点更新 区间最大值的相关文章

HDU 1754 I Hate It 线段树单点更新求最大值

题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #define N 200005 using namespace std; int data[N]; struct Tree { int l,r,ans; }tree[N*4]; void build(in

HDU 1754 I Hate It (线段树单点更新求最大值RMQ)

I Hate It Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. Input 本题目包含多组测试,请处理到文件结束.在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目.学生ID编号分别从1

hdu 1754 I Hate It 线段树单点更新和区间求和

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 参照HH大牛写的额! Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. Input 本题目包含多

【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): 37448    Accepted Submission(s): 14816 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要

HDU 1754 I Hate It 线段树(单点更新,成段查询)

题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=1754 题解: 单点更新,成段查询. 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define lson o<<1 6 #define rson (o<<1)|1 7 #define M l+(r

hdu 1754 I Hate It (线段树单点更新)

http://acm.hdu.edu.cn/showproblem.php?pid=1754 照着hdu 1166 的模板稍加改动即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int sum[1000000]; void push(int rt) { sum[rt]=max(sum[rt<<1],s

线段树单点更新区间最大值 hdoj1754I Hate It

题目:hdoj1754 I  Hate It 分析:更新的话,建树的时候保存叶子编号的的节点信息,然后从下往上更新就ok. 求和的话,从根节点开始,然后找在根的左边还是右边,然后递归找一个所有中的最大值即可. 代码: #include <cstdio> #include <algorithm> #include <iostream> using namespace std; const int N = 205000; struct Node { int l,r; int

hdu 3308 线段树单点更新 区间合并

http://acm.hdu.edu.cn/showproblem.php?pid=3308 学到两点: 1.以区间端点为开始/结束的最长......似乎在Dp也常用这种思想 2.分类的时候,明确标准逐层分类,思维格式: 条件一成立: { 条件二成立: { } else { } } else { 条件二成立: { } else { } } 上面的这种方式很清晰,如果直接想到那种情况iif(条件一 &条件二)就写,很容易出错而且把自己搞乱,或者情况不全,,,我就因为这WA了几次 3.WA了之后 ,

HDU 1166 敌兵布阵(线段树单点更新,板子题)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 87684    Accepted Submission(s): 36912 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务