HDU 1754 线段树 解题报告
来源:互联网 发布:intouch软件 编辑:程序博客网 时间:2024/06/05 05:18
I Hate It
Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 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。
Output
对于每一次询问操作,在一行里面输出最高成绩。
Sample Input
5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
Sample Output
5
6
5
9
Hint
Huge input,the C function scanf() will work better than cin
【解题报告】
单点赋值区间查询线段树
写一下练练手
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define maxn 200010#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int mx[maxn<<2];int n,m;void pushup(int rt){ mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);}void build(int l,int r,int rt){ if(l==r) { scanf("%d",&mx[rt]); return; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt);}void update(int p,int sc,int l,int r,int rt){ if(l==r) { mx[rt]=sc; return; } int m=(l+r)>>1; if(p<=m) update(p,sc,lson); else update(p,sc,rson); pushup(rt);}int query(int L,int R,int l,int r,int rt){ if(L<=l&&R>=r) return mx[rt]; int m=(l+r)>>1; int ret=0; if(L<=m) ret=max(ret,query(L,R,lson)); if(R>m) ret=max(ret,query(L,R,rson)); return ret; }int main(){ while(~scanf("%d%d",&n,&m)) { build(1,n,1); while(m--) { char opt[5]; int a,b; scanf("%s%d%d",opt,&a,&b); if(opt[0]=='Q') printf("%d\n",query(a,b,1,n,1)); if(opt[0]=='U') update(a,b,1,n,1); } } return 0;}
阅读全文
0 0
- HDU 1754 线段树 解题报告
- HDU 1754 解题报告 线段树 单点更新
- Hdu 1754 I Hate It 线段树 解题报告
- HDU 1166 解题报告 线段树
- HDU 1166 线段树 解题报告
- 【解题报告】 HDU 2795 Billboard -- 线段树的应用
- HDU 4893 Wow! Such Sequence! 解题报告(线段树)
- HDU 4913 Least common multiple 解题报告(线段树)
- HDU 5209 Relief grain 解题报告(树链剖分 + 线段树)
- HDU 1394 解题报告 线段树 单点更新
- 一维线段树模板 (HDU 1166)解题报告
- 【解题报告】HDU-4614 Vases and Flowers 线段树+二分
- HDU 1394 线段树统计逆序对 解题报告
- 【解题报告】 HDU 1754 I Hate It 线段树 单点更新
- hdu 1754 I Hate It 解题报告(线段树 代码+注释)
- 线段树_POJ2528_解题报告
- [ZJOI2016]线段树 解题报告
- 【解题报告】 HDU 1698 Just a Hook 线段树 (线段替换) 插线问线 + 延时标记
- sourceinsight tab 空格 对齐 等宽字体
- ChemEng Software Design ChemMaths 17.0 1CD完整解密版
- burp密码爆破(初学者粗略版)
- TCP/IP详解学习笔记(8)-DNS域名系统
- Android PHP Okhttp3模拟登陆和注册
- HDU 1754 线段树 解题报告
- 第一次自己搭建activeMQ实现高可用负载均衡集群心得
- 定位元素
- 03-变量类型
- 开启一个音乐播放器MediaPlayer
- [LintCode]167.链表求和
- oracle 数据库 数据表的5个约束类型
- C++中vector的基本操作
- 8.5 范数