hdu 1754 线段树 单点更新 动态区间最大值
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 52417 Accepted Submission(s): 20598
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define INF 0xfffffff
using namespace std;
int MAXV=-INF;
int MINV=INF;
struct tree
{
int L;
int R;
int maxv;
int minv;
int mid()
{
return (L+R)/2;
}
}tree[600010];
void buildtree(int root,int ss,int ee)
{
tree[root].L=ss;
tree[root].R=ee;
tree[root].minv=INF;
tree[root].maxv=-INF;
if(ss!=ee)
{
buildtree(2*root,ss,(ss+ee)/2);
buildtree(2*root+1,(ss+ee)/2+1,ee);
}
}
void insetree(int root ,int i,int s)
{
if(tree[root].L==tree[root].R)
{
tree[root].maxv=s;
tree[root].minv=s;
return ;
}
tree[root].maxv=max(tree[root].maxv,s);
tree[root].minv=min(tree[root].minv,s);
if(i<=tree[root].mid())
insetree(2*root,i,s);
else
insetree(2*root+1,i,s);
tree[root].maxv=max(tree[2*root].maxv,tree[2*root+1].maxv);//关键所在
}
void Query(int root,int ss,int ee)
{
if(tree[root].minv>=MINV&&tree[root].maxv<=MAXV)
return;
if(tree[root].L==ss&&tree[root].R==ee)
{ //cout<<"1****5"<<endl;
MAXV=max(tree[root].maxv,MAXV);
MINV=min(tree[root].minv,MINV);
return ;
}
if(ee<=tree[root].mid())
Query(2*root,ss,ee);
else if(ss>tree[root].mid())
Query(2*root+1,ss,ee);
else
{
// cout<<"1*****4"<<endl;
Query(2*root,ss,tree[root].mid());
Query(2*root+1,tree[root].mid()+1,ee); }
}
int main()
{
int n,m;
int chushi;
while(scanf("%d %d",&n,&m)!=EOF)
{
MAXV=-INF;
MINV=INF;
buildtree(1,1,n);
for(int i=1;i<=n;i++)
{
scanf("%d",&chushi);
insetree(1,i,chushi);
}
int ss,ee;
char panduan;
for(int j=1;j<=m;j++)
{ //scanf("%c",&panduan);
// getchar();
// scanf("%d %d",&ss,&ee);
cin>>panduan>>ss>>ee;
MAXV=-INF;
MINV=INF;
if(panduan=='Q')
{
Query(1,ss,ee);
printf("%d\n",MAXV);
}
else
insetree(1,ss,ee);
}
}
return 0;
}
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
Huge input,the C function scanf() will work better than cin
hdu 1754 线段树 单点更新 动态区间最大值的更多相关文章
- HDU - 1754 线段树-单点修改+询问区间最大值
这个也是线段树的经验问题,待修改的,动态询问区间的最大值,只需要每次更新的时候,去把利用子节点的信息进行修改即可以. 注意更新的时候区间的选择,需要对区间进行二分. #include<iostr ...
- hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- hdu 1166线段树 单点更新 区间求和
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2795 线段树单点更新
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...
- HDU 2795 Billboard (线段树单点更新 && 求区间最值位置)
题意 : 有一块 h * w 的公告板,现在往上面贴 n 张长恒为 1 宽为 wi 的公告,每次贴的地方都是尽量靠左靠上,问你每一张公告将被贴在1~h的哪一行?按照输入顺序给出. 分析 : 这道题说明 ...
- HDU 3308 线段树单点更新+区间查找最长连续子序列
LCIS Time Limit: 6000/2000 MS (Java/Oth ...
随机推荐
- 配置vConsole调试console
1.使用 npm 安装: npm install vconsole 再使用webpack,然后js代码中 import VConsole from 'vconsole/dist/vconsole.mi ...
- 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档
孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...
- vuejs学习之 项目打包之后的首屏加载优化
vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...
- 默认初始化&拷贝初始化&直接初始化&值初始化&列表初始化
一.各种初始化的形式 /* 定义变量形式一:不指定初始值 */ int a; // 默认初始化 /* 定义变量形式二:指定初始值 */ int b = 1; // 拷贝初始化 int b(1); // ...
- 基于spec评论“欢迎来怼”团队Alpha版作品
“欢迎来怼”团队的作品是手机版博客园 1.获取此博客园app的方式——二维码 通过扫描二维码的方式下载app,这是当今比较流行的方式,适合广大手机的使用者——青少年的使用习惯. 2.点击图标,进入该a ...
- 团队作业week9 情景测试
一.使用人群:学生.计算机工作者.对计算机感兴趣的人 1.学生:学生是学霸系统的主要用户.学生一般会通过网络寻找与自己的课程,作业有关的信息.首先,可以通过我们的搜索功能在我们的数据库中寻找我们从网络 ...
- C语言 结构体相关 函数 指针 数组
. 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...
- MFC修改视图CView的背景颜色
(1) 在CYournameView(就是你的视图类,以下以CDrawLineView为例)添加了一个背景颜色变量 COLORREF m_bgcolor; (2)修改这个函数: BOOL CDrawL ...
- 用SC命令 添加或删除windows服务提示OpenSCManager 失败5 拒绝访问
在安装命令行中安装 windowsOpenSCManager 失败5 的错误,原因是当前用户的权限不足,需要做的是在注册表 HKEY_LOCAL_MACHINE\Software\Microsof ...
- struts如何在Action类中操作request,session
在servlet中,通过request.getparameter与setparameter来实现后端与前端jsp页面的数据交互,那么在struts中,也有几种方式来操作request,session实 ...