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 ...
随机推荐
- 【转】MMORPG游戏服务器技能系统设计:表格字段与技能程序框架
本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖讨论~ 技能其实是战斗系统的一个组成部分,战斗基本 ...
- java代码读取yarn聚合目录日志
可以直接使用org.apache.hadoop.yarn.client.cli.LogsCLI(yarn logs -applicationId)中的main方法逻辑,如 public static ...
- Java中定时器相关实现的介绍与对比之:Timer和TimerTask
Timer和TimerTask JDK自带,具体的定时任务由TimerTask指定,定时任务的执行调度由Timer设定.Timer和TimerTask均在包java.util里实现. 本文基于java ...
- Apache--Override参数详解
1 AuthConfig 允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAut ...
- nginx 应用篇
nginx 信号控制(commanLine) kill singel pid ps aux|grep nginx nginx 有两个进程,一个 master 一个worker 一个master管理一 ...
- 普通Java类获取Spring的Bean的方法
普通Java类获取Spring的Bean的方法 在SSH集成的前提下.某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象. 之前我在网上找了好几好久都没有找到合适的方 ...
- HDU 4169 Wealthy Family(树形DP)
Problem Description While studying the history of royal families, you want to know how wealthy each ...
- Python中如何Getting Help
在Python中Gettting Help有如下两种方法: 1 使用dir函数,dir的参数可以是一个真正的对象实例,也可以是一个数据类型,无论哪种情形,dir函数都返回与这个对象或者数据类型相关联的 ...
- 用URL传参带特殊字符,特殊字符丢失
文章:URL中编码URL特殊字符 文章:用URL传参带特殊字符,特殊字符丢失(encode) 如果url中有特殊字符,需要对url进行编码,否则特殊字符丢失,导致最终接收到的值不对.
- LintCode-66.二叉树的前序遍历
二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 给出一棵二叉树 {1,#,2,3}, 返回 [1,2,3]. 挑战 你能使用非递归实现么? 标签 递归 二叉树 二叉树遍历 非递归 c ...