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. SSH整合(1)异常

    信息: No Spring WebApplicationInitializer types detected on classpath 十二月 01, 2016 10:06:12 下午 org.apa ...

  2. mac 下 终端常用命令

    open . 打开当前路径下的文件夹 open (路径) 打开此路径下的文件夹 (路径:/Users/linger/Library/Application\ Support/Google/Chrome ...

  3. PHP超时处理全面总结

    [ 概述 ] 在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面 ...

  4. centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复

    centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复 有时候我们会碰到这样的业务场景: 1.将大的数据库恢复到本地进行业务测试 ...

  5. 比较一下Linux下的Epoll模型和select模型的区别

    一. select 模型(apache的常用) 1. 最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048 ,因此 Sel ...

  6. hive中的一些参数

    动态分区 设置如下参数开启动态分区:hive.exec.dynamic.partition=true默认值:false描述:是否允许动态分区hive.exec.dynamic.partition.mo ...

  7. C#去掉list集合中的重复数据

    List<string> conList= new List<string>(); List<string> listII = new List<string ...

  8. Python 包的相对导入讲解

    [Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html

  9. NSMutableAttributedString(改变文字颜色)

    //类型 //创建一个label    UILabel *label1=[[UILabel alloc]initWithFrame:CGRectMake(130, 60,250, 150)];     ...

  10. 加载form表单

    var row = $('#dg').datagrid('getData').rows[rowIndex];      $('#moneyff').form('load', row);//row 可以 ...