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 ...
随机推荐
- Java开发工程师(Web方向) - 03.数据库开发 - 第3章.SQL注入与防范
第3章--SQL注入与防范 SQL注入与防范 经常遇到的问题:数据安全问题,尤其是sql注入导致的数据库的安全漏洞 国内著名漏洞曝光平台:WooYun.org 数据库泄露的风险:用户信息.交易信息的泄 ...
- LeetCode - 326, 342, 231 Power of Three, Four, and Two
1. 问题 231. Power of Two: 判断一个整数是否是2的n次方,其中n是非负整数 342. Power of Four: 判断一个整数是否是4的n次方,其中n是非负整数 326. Po ...
- POJ 3675 Telescope(简单多边形和圆的面积交)
Description Updog is watching a plane object with a telescope. The field of vision in the telescope ...
- apache访问403错误
1.排查selinux 2.目录权限 3.WEB主目录是否正确
- 解读:未来30年新兴科技趋势报告(AI Frist,IoT Second)
前段时间美国公布的一份长达35页的<未来30年新兴科技趋势报告>.该报告是在美国过去五年内由政府机构.咨询机构.智囊团.科研机构等发表的32份科技趋势相关研究调查报告的基础上提炼形成的. ...
- Nodejs中关于模块的总结
关于Nodejs中的模块 概念 Nodejs在ECMAScript的基础上扩展并封装了许多高级特性,如文件访问.网络访问等,使得Nodejs成为一个很好的Web开发平台.基于Nodejs这个平台将We ...
- 左值&右值
一.引子 我们所谓的左值.右值,正确的说法应该是左值表达式.右值表达式. 因为C++的表达式不是左值就是右值. 在C中,左值指的是既能够出现在等号左边也能出现在等号右边的表达式,右值指的则是只能出现在 ...
- C语言 结构体相关 函数 指针 数组
. 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...
- .net下将exe改造为既能双击独立运行又能注册为windows服务
最近项目中需要将一些业务的处理程序改造为windows服务,但是考虑到实际需求,也需要能够直接双击运行这些处理程序.首先第一步想到的就是原来的项目不变,只需要在加一个windows服务的项目就行.但是 ...
- 记一次dll强命名冲突事件
一 问题的出现 现在要做一个net分布式平台,平台涉及多个服务之间调用问题,最基础的莫过于sso.由于我们的sso采用了wcf一套私有框架实现,另外一个webapi服务通过接口调用sso服务.由于s ...