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

Posted

tags:

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754

题意:线段树的单点更新和区间求最值

模板题,,,???,, 

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 typedef long long LL;
 6 const int N=200010;
 7 
 8 LL ans;
 9 LL max(LL a,LL b){
10     if(a>b) return a;
11     else return b;    
12 }
13 
14 struct Tree{
15     LL l,r;
16     LL MAX;
17 };
18 Tree tree[N*4];
19 
20 void pushup(LL x){
21     LL tmp=2*x;
22     tree[x].MAX=max(tree[tmp].MAX,tree[tmp+1].MAX);
23 }
24 
25 void build(LL l,LL r,LL x){
26     tree[x].l=l;
27     tree[x].r=r;
28     if(l==r){
29         scanf("%lld",&tree[x].MAX);
30         return ;
31     }
32     LL tmp=x<<1;
33     LL mid=(l+r)>>1;
34     build(l,mid,tmp);
35     build(mid+1,r,tmp+1);
36     pushup(x);     
37 }
38 
39 
40 void update(LL l,LL r,LL c,LL x){
41     if(r<tree[x].l||l>tree[x].r) return ;
42     if(l==tree[x].l&&r==tree[x].r){
43         tree[x].MAX=c;
44         return ;
45     }
46     LL tmp=x<<1;
47     update(l,r,c,tmp);    
48     update(l,r,c,tmp+1);
49     pushup(x);
50 }
51 
52 
53 void query(LL l,LL r,LL x){
54     if(r<tree[x].l||l>tree[x].r) return ;
55     if(l<=tree[x].l&&r>=tree[x].r){
56         if(ans<tree[x].MAX) ans=tree[x].MAX;
57         return ;
58     }
59     LL tmp=x<<1;
60     LL mid=(tree[x].l+tree[x].r)>>1;
61     if(r<=mid) query(l,r,tmp);
62     else if(l>mid) query(l,r,tmp+1);
63     else{
64         query(l,mid,tmp);
65         query(mid+1,r,tmp+1);
66     }
67 }
68 
69 int main(){
70     int n,m;
71     while(scanf("%d %d",&n,&m)!=EOF){    
72         build(1,n,1);
73         char op;
74         LL a,b;
75         for(int i=1;i<=m;i++){
76             getchar();
77             scanf("%c",&op);
78             scanf("%lld %lld",&a,&b);
79             if(op==U){
80                 update(a,a,b,1);
81             }
82             else if(op==Q){
83                 ans=-11111;
84                 query(a,b,1);
85                 printf("%lld\n",ans);
86             }
87         }
88     }
89     return 0;
90 }

 

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

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(线段树 单点修改)