ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

I Hate It HDU - 1754

2021-03-04 13:33:32  阅读:221  来源: 互联网

标签:mmax HDU include int tr maxn build 1754 Hate


原题链接

考察:线段树 or 树状数组

思路:

        套模板即可.

注意:build函数里,赋值不是赋值a[u],而是a[l].l、r是1~n范围内.u是线段树结点编号.

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 const int N = 200010;
 7 int n,m,a[N];
 8 char op[2];
 9 struct Node{
10     int l,r,maxn;
11 }tr[N*4];
12 int mmax(int a,int b)
13 {
14     return a>b?a:b;
15 }
16 void pushup(int u)
17 {
18     tr[u].maxn = mmax(tr[u<<1].maxn,tr[u].maxn);
19     tr[u].maxn = mmax(tr[u<<1|1].maxn,tr[u].maxn);
20 }
21 void build(int u,int l,int r)
22 {
23     tr[u].l = l,tr[u].r = r;
24     if(l==r) tr[u].maxn = a[l];
25     else{
26         int mid = l+r>>1;
27         build(u<<1,l,mid);
28         build(u<<1|1,mid+1,r);
29         pushup(u);
30     }
31 }
32 void modify(int u,int idx,int x)
33 {
34     if(tr[u].l==tr[u].r) tr[u].maxn = x;
35     else{
36         int mid = tr[u].l+tr[u].r>>1;
37         if(idx<=mid) modify(u<<1,idx,x);
38         else modify(u<<1|1,idx,x);
39         pushup(u);
40     }
41 }
42 int query(int u,int l,int r)
43 {
44     if(tr[u].l>=l&&tr[u].r<=r) return tr[u].maxn;
45     else{
46         int mid = tr[u].l+tr[u].r>>1,res = 0;
47         if(l<=mid) res = mmax(query(u<<1,l,r),res);
48         if(r>mid) res = mmax(query(u<<1|1,l,r),res);
49         return res;
50     }
51 }
52 int main()
53 {
54     while(scanf("%d%d",&n,&m)!=EOF)
55     {
56         memset(tr,0,sizeof tr);
57         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
58         build(1,1,n);
59         int x,y;
60         while(m--)
61         {
62             scanf("%s%d%d",op,&x,&y);
63             if(op[0]=='Q') printf("%d\n",query(1,x,y));
64             else modify(1,x,y);
65         }
66     }
67     return 0;
68 }
69  

 

标签:mmax,HDU,include,int,tr,maxn,build,1754,Hate
来源: https://www.cnblogs.com/newblg/p/14479718.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有