版权声明:本文为博主原创文章。未经博主同意不得转载。vasttian https://blog.csdn.net/u012860063/article/details/32982923

转载请注明出处:http://blog.csdn.net/u012860063

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

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

代码例如以下:

//线段树功能:update:单点替换 query:区间最值
//此题为Hdu 1754 #include <cstdio>
#include <algorithm>
using namespace std;
#define lson l , mid , rt << 1
#define rson mid + 1 , r , rt << 1 | 1
//lson和rson分辨表示结点的左儿子和右儿子
//rt表示当前子树的根(root),也就是当前所在的结点
const int maxn = 222222;
//maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开大于maxn的最小2x的两倍
int sum[maxn<<2];
int max(int x,int y)
{
if(x > y)
return x;
return y;
}
void PushUP(int rt) //把当前结点的信息更新到父结点
{
sum[rt] = max(sum[rt<<1],sum[rt<<1|1]);
} void build(int l,int r,int rt)
{
if (l == r)
{
scanf("%d",&sum[rt]);
return ;
}
int mid = (l + r) >> 1;
build(lson);
build(rson);
PushUP(rt);
}
void update(int p,int sc,int l,int r,int rt)
{
if (l == r) //叶节点
{
sum[rt] = sc;
return ;
}
int mid = (l + r) >> 1;
if (p <= mid)//递归更新左子树或者右子树
update(p , sc , lson);
else
update(p , sc , rson);
PushUP(rt);
}
int query(int L,int R,int l,int r,int rt)
{//查询区间[L,R]中的最大值
if (L <= l && r <= R)//当前结点全然包括在查询区间内
{
return sum[rt];
}//要取rt子节点的值时,也要先把rt的延迟标记向下移动
int mid = (l + r) >> 1;
int ret = 0;
if (L <= mid) //往左走
ret = max(ret,query(L , R , lson));
if (mid < R)//往右走
ret = max(ret,query(L , R , rson));
return ret;
}
int main()
{
int N , M;
while(~scanf("%d%d",&N,&M))//N为节点数
{
build(1 , N , 1); //建树
while (M--)//M为询问次数
{
char op[2];
int a , b;
scanf("%s%d%d",op,&a,&b);
if (op[0] == 'Q')
{
printf("%d\n",query(a , b , 1 , N , 1));
}
else
{
update(a , b , 1 , N , 1);//把a的成绩更为b
}
}
}
return 0;
}

hdu 1754 I Hate It (线段树功能:单点更新和区间最值)的更多相关文章

  1. HDU 1754 I Hate It(线段树之单点更新,区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)

    I Hate ItTime Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并

    Tunnel Warfare                                  Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...

  4. HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. HDU(1754),线段树,单点替换,区间最值

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...

  6. HDU 3308 LCIS (线段树&#183;单点更新&#183;区间合并)

    题意  给你一个数组  有更新值和查询两种操作  对于每次查询  输出相应区间的最长连续递增子序列的长度 基础的线段树区间合并  线段树维护三个值  相应区间的LCIS长度(lcis)  相应区间以左 ...

  7. hdu 1166 敌兵布阵 (线段树、单点更新)

    敌兵布阵Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  8. UVA12532 线段树(单点更新,区间求乘积的正负)

    It’s normal to feel worried and tense the day before a programming contest. To relax, you went out f ...

  9. POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4721   Accepted: 1593 D ...

  10. Codeforces768B-Code For 1-类似线段树-枚举+单点更新or区间更新

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面.  每次把\(n\ ...

随机推荐

  1. 呼叫WCF Service的方法出现Method not allowed异常

    asp.net mvc练习程序,经常性在家里电脑,笔记本或是公司的电脑之间拷贝与粘贴,如果忘记携带最新的练习程序,一些小功能只能重新写了.如前一篇<ASP.NET MVC呼叫WCF Servic ...

  2. css溢出滚动条及去除滚动条的方法

    <div class="father"> <div class="childern"></div> </div> ...

  3. Math Magic(完全背包)

    Math Magic Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  4. Mybatis的自动映射autoMappingBehavior与mapUnderscoreToCamelCase

    autoMappingBehavior 在Mybatis的配置文件中添加settings属性的autoMappingBehavior <settings> <setting name ...

  5. 3.Decorator Pattern(装饰者模式)

    装饰者模式: 动态地将责任附加到对象上.想要扩展功能,装饰者提供有别于继承的另一种选择. 举例: 不知道大家学校的食堂是什么点餐制度(或者大家就直接想成吃火锅,我们要火锅料 + 配菜),我们学校的点餐 ...

  6. Into outfile禁用情况下另类方法拿webshell

    首先环境如下: OS:Windows 2003 WAF:Safe Dog 4.0正式版 phpmyadmin:4.7(许多都可以) Mysql:5.5+ PHP:5.3 Apache:2.x 总结方法 ...

  7. 小程序 js中获取时间new date()的用法(网络复制过来自用)

    js中获取时间new date()的用法   获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获 ...

  8. JSP内置对象——response对象

    看一个实例: 运行结果: 出现了一个很奇怪的现象,这个outer对象输出的字符串,跑到顶部去了.这个呢也就说明了response对象获得的writer对象的输出总是前于我们的内置对象.(respons ...

  9. Linux  释放Linux 系统预留的硬盘空间

    释放 Linux 系统预留的硬盘空间 by:授客 QQ:1033553122   大多数文件系统都会保留一部分空间作为紧急情况时用(比如硬盘空间满了),这样能保证有些关键应用(比如数据库)在硬盘满的时 ...

  10. Sql 中存储过程详细案例

    转自:http://www.cnblogs.com/yank/p/4235609.html 概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存 ...