线段树 区间查询最大值,单体修改 hdu 1754

Posted pangbi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树 区间查询最大值,单体修改 hdu 1754相关的知识,希望对你有一定的参考价值。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<queue>
 6 #include<iostream>
 7 using namespace std;
 8 const int maxn=2e5+10;
 9 int ary[maxn];
10 struct node
11 
12     int l,r,val;
13 tree[maxn<<2];
14 void push_up(int cur)
15 
16     tree[cur].val=max(tree[cur*2].val,tree[cur*2+1].val);
17 
18 void build(int l,int r,int cur)
19 
20     tree[cur].l=l,tree[cur].r=r;
21     tree[cur].val=0;
22     if(l==r)
23         tree[cur].val=ary[l];
24         return;
25     
26     int mid=(l+r)/2;
27     build(l,mid,cur*2);
28     build(mid+1,r,cur*2+1);
29     push_up(cur);
30 
31 int query(int l,int r,int cur)
32 
33 
34     if(l<=tree[cur].l&&r>=tree[cur].r)
35         return tree[cur].val;
36     int mid=(tree[cur].l+tree[cur].r)/2;
37     int ans=0;
38     if(l<=mid) ans=max(ans,query(l,r,cur*2));
39     if(r>mid)  ans=max(ans,query(l,r,cur*2+1));
40     return ans;
41 
42 void Update(int base,int price,int cur)
43 
44     if(tree[cur].l==tree[cur].r)
45         tree[cur].val=price;
46         return;
47     
48     int mid=(tree[cur].l+tree[cur].r)/2;
49     if(base<=mid) Update(base,price,cur*2);
50     else          Update(base,price,cur*2+1);
51     push_up(cur);
52 
53 int main()
54 
55     int n,m;
56     while(scanf("%d%d",&n,&m)!=EOF)
57         for(int i=1;i<=n;i++) scanf("%d",&ary[i]);
58         build(1,n,1);
59         while(m--)
60             char tmp;
61             cin>>tmp;
62             if(tmp==Q)
63                 int l,r;
64                 scanf("%d%d",&l,&r);
65                 int ans=query(l,r,1);
66                 printf("%d\n",ans);
67             
68             else
69                 int l,r;
70                 scanf("%d%d",&l,&r);
71                 Update(l,r,1);
72             
73         
74     
75     return 0;
76 

 

以上是关于线段树 区间查询最大值,单体修改 hdu 1754的主要内容,如果未能解决你的问题,请参考以下文章

HDU - 1754 线段树-单点修改+询问区间最大值

Hdu 1698(线段树 区间修改 区间查询)

HDU1754 —— 线段树 单点修改及区间最大值

HDU - 5443The Water Problem 线段树(区间查询最大值)

HDU 1166 - 敌兵布阵 - [单点修改区间查询zkw线段树]

HDU 2795 Billboard 线段树维护区间最大值&&查询变形