I Hate It

hdu1754

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18466    Accepted Submission(s): 7172

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

Hint

Huge input,the C function scanf() will work better than cin

 
Author
linle
 
Source
2007省赛集训队练习赛(6)_linle专场

典型的线段树,成段更新,成端查询最大值
直接套用模块
pushdown都可以不要,pushup一句话直接写到建树和更新里面
AC代码

#include<cstdio>
#include<iostream>
#include<cstring>
#define maxx 2000005
#define R(u) (u<<1|1)
#define L(u) (u<<1)
using namespace std;
int c[maxx];
struct Node{
int score;
int left,right;
}node[maxx<<];
int maxl(int a,int b)
{
return a>b?a:b;
}
void Build(int u,int l,int r)
{
node[u].left=l,node[u].right=r;
if(l==r){//叶子节点
node[u].score=c[l];
return ;
}
int mid=(l+r)>>;
Build(L(u),l,mid);
Build(R(u),mid+,r);
node[u].score=maxl(node[L(u)].score,node[R(u)].score);
}
void update(int u,int a,int b)
{
if(node[u].left==node[u].right){
node[u].score=b;
return ;
}
int mid=(node[u].left+node[u].right)>>;
if(a<=mid)//左边
update(L(u),a,b);
else update(R(u),a,b);
node[u].score=maxl(node[L(u)].score,node[R(u)].score);
}
int Qurey(int u,int l,int r)
{
if(l==node[u].left&&r==node[u].right)
return node[u].score;
int mid=(node[u].left+node[u].right)>>;
if(mid>=r) return Qurey(L(u),l,r);
else if(mid<l) return Qurey(R(u),l,r);
else return maxl(Qurey(L(u),l,mid),Qurey(R(u),mid+,r));
}
int main()
{
freopen("simple.in","r",stdin);
int n,m;
while(~scanf("%d %d",&n,&m))
{
for(int i=;i<n;i++)
scanf("%d",&c[i]);
Build(,,n-);
for(int i=;i<=m;i++)
{
getchar();//把空格读掉
char x[];int a,b;
scanf("%s %d %d",x,&a,&b);
if(x[]=='Q')
printf("%d\n",Qurey(,a-,b-));
else
update(,a-,b);
}
}
return ;
}

I Hate It(hdu1754)(线段树区间最大值)的更多相关文章

  1. poj3468 A Simple Problem with Integers (线段树区间最大值)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92127   ...

  2. nyoj 119 士兵杀敌(三)【线段树区间最大值最小值差】

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...

  3. HDU 2795 线段树区间最大值,单点更新+二分

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. HDU 5029 Relief grain 树链剖分打标记 线段树区间最大值

    Relief grain Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  5. POJ3264 Balanced Lineup 线段树区间最大值 最小值

    Q个数 问区间最大值-区间最小值 // #pragma comment(linker, "/STACK:1024000000,1024000000") #include <i ...

  6. hdoj 2795 Billboard【线段树区间最大值】

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. hdoj1754 I Hate It【线段树区间最大值维护+单点更新】

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

  8. B - I Hate It HDU - 1754 线段树区间最大值板子(单点更新,区间最大)

    第一次打 改了半天  各种小错误 难受 #include<cstdio> #include<iostream> using namespace std; +; int a[ma ...

  9. POJ 2823 Sliding Window 线段树区间求和问题

    题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...

随机推荐

  1. Qlikview 处理增量数据的脚本

    一般设计Qlikview报表的时候需要些2个脚本文件,一个针对Qlikview的Server job 导出数据到qvd数据文具. 另一个用户访问的Qlikview的脚本是直接展示qvd文件的数据. 事 ...

  2. Centos 6 之samba 搭建

    学习linux从实践做起. 实验环境:vmware,cenots 6,xshell 注意:使用vmware 时,网络连接设置成桥接,和宿主机位于同一个网段. 实验需求:模拟实际公司文件服务器. 新建S ...

  3. SQL笔记-第八章,子查询

    一.SELECT列表中的标量子查询 查询每种书籍类型中的最早出版的书籍.在SQL 查询中,需要将一本书籍的出版年份与该类型的所有书籍的出版年份进行比较,并且仅仅在它们匹配时,才返回一个记录 SELEC ...

  4. jquery点击添加样式,再点击取出样式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. html text加提示语

    <input type="text" id="key" name="key" value=" 请输入关键词" on ...

  6. win8自动升级win8.1后 wampserver无法启动

    原因是升级时win8把其他的系统服务都给停止了. 解决办法是左键点击wamp的小图标,选择apache/mysql - service - 安装服务. 然后再选择启动服务,即可.

  7. 计算机病毒实践汇总四:netcat使用方法

    在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. netcat概述 (1)特性 "TCP/IP协议栈瑞士军刀",可以被用在支持端口扫描. ...

  8. centos dns配置

    vi /etc/sysconfig/network-scripts/ifcfg-[tab两下] 新增以下修改 ONBOOT=yes  #开启自动启用网络连接 IPADDR0=192.168.21.12 ...

  9. 单片机TM4C123学习(十):ADC采样模块

    1.头文件 #include "tiva_adc.h" // ADC 2.引脚 3.初始化 // ADC初始化 // 光敏电阻(PE0)为通道3,存在序列0中,硬件平均为8个点 a ...

  10. vim编辑格式与环境设置

    set wildmenu set backspace= set pastetoggle=<f3> filetype on filetype plugin on filetype inden ...