hdu 1754 I Hate It(线段树单点更新(a位置的值变成b)+区间求最值)
来源:互联网 发布:北京金和网络北京 编辑:程序博客网 时间:2024/06/05 09:37
题目地址
题目大意:有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目,学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
解题思路:单点变值,区间求最值
#include<bits/stdc++.h>using namespace std;const int maxn = 200000+100;int head[maxn];struct node{ int l,r; int value;}tree[4*maxn];void build(int l,int r,int id){ int mid=(l+r)>>1; tree[id].l=l; tree[id].r=r; if(l==r) tree[id].value=head[l]; else { build(l,mid,id*2); build(mid+1,r,id*2+1); tree[id].value=max(tree[2*id].value,tree[2*id+1].value); }}int query(int a,int b,int id){ if(tree[id].l==a && tree[id].r==b) return tree[id].value; int mid=(tree[id].l+tree[id].r)>>1; if(b<=mid) return query(a,b,2*id); else if(a>mid) return query(a,b,2*id+1); else return max(query(a,mid,id*2),query(mid+1,b,id*2+1));}void update(int a,int b,int id) ///将a位置的值变成b{ tree[id].value = max(b,tree[id].value); if(tree[id].l==tree[id].r) { tree[id].value = b; return; } int mid=(tree[id].l+tree[id].r)>>1; if(a<=mid) update(a,b,id*2); else update(a,b,id*2+1);}int main(){ int n,m; char c; int a,b; while(scanf("%d%d",&n,&m) != EOF) { for(int i = 1; i <= n; i++) scanf("%d",&head[i]); build(1,n,1); for(int i = 1; i <= m; i++) { scanf("%*c%c%d%d",&c,&a,&b); if(c == 'U') update(a,b,1); else if(c == 'Q') printf("%d\n",query(a,b,1)); } } return 0;}
0 0
- hdu 1754 I Hate It(线段树单点更新(a位置的值变成b)+区间求最值)
- hdu 1754 I Hate It (线段树功能:单点更新和区间最值)
- hdu 1754 I Hate It(线段树,单点更新,区间最值)
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
- HDU 1754-I Hate It(线段树:单点更新,区间最值)
- hdu 1754 I Hate It ----->线段树(区间最值,单点更新)
- HDU 1754 I Hate It(线段树单点更新区间最值查询)
- [HDU]1754 I Hate It (线段树--单点更新,区间最值)
- hdu 1754:I Hate It(线段树 单点更新+区间最值)
- HDU 1754 I Hate It(线段树 单点更新 区间最大值)
- HDU 1754 I Hate It(线段树:单点更新,求区间最大值)
- HDU 1754 I Hate It (线段树+单点更新+区间询问)
- HDU 1754 I hate it(线段树。单点更新, 区间查询)
- Hdu-1754 I hate it【线段树(单点更新)】
- hdu 1754 I Hate It(线段树,单点更新)
- HDU 1754 - I Hate It (线段树 单点更新)
- hdu 1754 I Hate It(线段树+单点更新)
- HDU 1754 I Hate It (线段树单点更新)
- Majority Element
- 删除通讯录所有信息
- Leetcode -- Wildcard Matching
- 取SVN过去的某个版本文件
- 教你如何快速下载旧版本的Firefox浏览器
- hdu 1754 I Hate It(线段树单点更新(a位置的值变成b)+区间求最值)
- 数据传输协议库(protobuffer & flatbuffer)
- 调用系统导航
- 阶乘尾数零的个数
- Pixhawk---固件编译由make编译系统转到cmake编译系统解决方法,快来看
- Tomcat目录下的各个文件夹的作用
- Oracle两种分页小记
- 元数据管理器中存在错误。 日志文件的扩展名只能是 .LOG。
- Spring学习2--IOC应用