hdu 1754 I Hate It (线段树功能:单点更新和区间最值)
版权声明:本文为博主原创文章。未经博主同意不得转载。vasttian https://blog.csdn.net/u012860063/article/details/32982923
转载请注明出处:http://blog.csdn.net/u012860063
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754
这让非常多学生非常反感。
无论你喜不喜欢,如今须要你做的是,就是依照老师的要求,写一个程序。模拟老师的询问。当然,老师有时候须要更新某位同学的成绩。
在每一个測试的第一行,有两个正整数 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。
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 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 (线段树功能:单点更新和区间最值)的更多相关文章
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 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 ...
- HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Lim ...
- HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU(1754),线段树,单点替换,区间最值
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...
- HDU 3308 LCIS (线段树·单点更新·区间合并)
题意 给你一个数组 有更新值和查询两种操作 对于每次查询 输出相应区间的最长连续递增子序列的长度 基础的线段树区间合并 线段树维护三个值 相应区间的LCIS长度(lcis) 相应区间以左 ...
- hdu 1166 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- UVA12532 线段树(单点更新,区间求乘积的正负)
It’s normal to feel worried and tense the day before a programming contest. To relax, you went out f ...
- POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4721 Accepted: 1593 D ...
- Codeforces768B-Code For 1-类似线段树-枚举+单点更新or区间更新
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 每次把\(n\ ...
随机推荐
- XML反序列化出错,XML 文档(2, 2)中有错误
XML转换为实体类的错误处理方案 一.错误描述: XML反序列化出错,XML 文档(2, 2)中有错误 二.解决方案: 在实体类的字段要加上XmlElement属性 三.具体实现: 1.XML文档 & ...
- PowerDesigner 创建表格及导出SQL语句
PowerDesigner 创建表格及导出SQL语句 目的:提高数据库创建表格效率 测试数据库:orcale 1.新建物理模型. 右键点击workplace,new一个物理模型并指定数据库. 2. ...
- nehibernet .net注意事项
1:xml属性:嵌入资源建立实体对象:public virtual int id{get;set;}建立与实体对象同名的xml文件,以.hbm.xml为扩展名2:StructureMap.config ...
- 设计模式之单例模式(Singleton)(1)
单例模式是一种比较简单的设计模式,简单来说,就是确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式特点: 1)单例类只能有一个实例. 2)单例类必须自己创建自己的唯一实例. 3 ...
- 悟空模式-java-建造者模式
[此是锻炼神冰铁,磨琢成工光皎洁.老君自己动钤锤,荧惑亲身添炭屑.五方五帝用心机,六丁六甲费周折.造成九齿玉垂牙,铸就双环金坠叶.身妆六曜排五星,体按四时依八节.短长上下定乾坤,左右阴阳分日月.六爻神 ...
- 小程序 波浪进度球 wave
直接上代码: //index.js //获取应用实例 const app = getApp() var wave = function (ctx, oRange){ var tid; //oRange ...
- django-xss攻击原理与防范
一.跨站脚本攻击(XSS) XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.也属一种注入攻击,注入本质上就是把输入的数据变成可执行的程序 ...
- JS 关于this p9
关于this这个货,常常让我感到头疼,也很难说清这货到底是什么机制,今天就详细记录一下this,了解他就跟理解闭包差不多,不理解的时候我们会感到很难受总想着避开他,当我们真正理解之后,会有种茅塞顿开的 ...
- linux 新建用户和权限分配
1.创建新用户:testuser 命令:#useradd 选项 用户名 选项: -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主 ...
- drupal7获取当前theme的路径
//方式一 $theme_path=drupal_get_path('theme', $theme); //方式二 $theme_path=path_to_theme();