I Hate It

                                                                            Time Limit: 9000/3000 MS (Java/Others)    Memory Limit:
32768/32768 K (Java/Others)

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
 
线段树入门题目。
近期做多校联合的比赛,发现每一场比赛都有涉及到线段树的题目,可是我之前没有学过线段树。于是决定学一下。
#include<cstdio>
#include<algorithm>
using namespace std; #define lson l, mid, root<<1
#define rson mid+1, r, root<<1|1 const int N = 2000000 + 50;
struct node
{
int l, r, mmax;
}a[4*N]; void build_tree(int l, int r, int root)
{
a[root].l = l;
a[root].r = r;
if(l == r)
{
scanf("%d",&a[root].mmax);
return ;
}
int mid = (l + r) >> 1;
build_tree(lson);
build_tree(rson);
a[root].mmax = max(a[root<<1].mmax, a[root<<1|1].mmax);
} void update(int l, int r, int root, int k)
{
if(l == a[root].l && r == a[root].r)
{
a[root].mmax = k;
return;
}
int mid = (a[root].l + a[root].r) >> 1;
if(r <= mid)
update(l, r, root<<1, k);
else if(l > mid)
update(l, r, root<<1|1, k);
else
{
update(lson, k);
update(rson, k);
}
a[root].mmax = max(a[root<<1].mmax, a[root<<1|1].mmax); //更新完单个点之后更新整棵树
} int Query(int l, int r, int root)
{
if(l == a[root].l && r == a[root].r)
return a[root].mmax;
int mid = (a[root].l + a[root].r) >> 1;
if(r <= mid)
return Query(l, r, root<<1);
else if(l > mid)
return Query(l, r, root<<1|1);
else
return max(Query(lson), Query(rson));
} int main()
{
int n, m, a, b;
char ch[5];
while(~scanf("%d%d",&n,&m))
{
build_tree(1, n, 1);
while(m--)
{
getchar();
scanf("%s%d%d",ch, &a, &b);
if(ch[0] == 'Q')
printf("%d\n",Query(a, b, 1));
else
update(a, a, 1, b);
}
}
return 0;
}

hdu 1754 I Hate It(线段树之 单点更新+区间最值)的更多相关文章

  1. HDU 1754 I Hate It(线段树之单点更新 区间最值查询)

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

  2. HDU 1754 I Hate It(线段树之单点更新,区间最值)

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

  3. hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)

    I Hate ItTime Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  4. HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )

    线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...

  5. hdu 1754 线段树(单点替换 区间最值)

    Sample Input5 61 2 3 4 5Q 1 5 //1-5结点的最大值U 3 6 //将点3的数值换成6Q 3 4Q 4 5U 2 9Q 1 5 Sample Output5659 # i ...

  6. hdu 1166 敌兵布阵 (线段树、单点更新)

    敌兵布阵Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并

    Tunnel Warfare                                  Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...

  8. hdu 敌兵布阵(线段树之单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. hdu 1754 I Hate It 线段树 点改动

    // hdu 1754 I Hate It 线段树 点改动 // // 不多说,裸的点改动 // // 继续练 #include <algorithm> #include <bits ...

随机推荐

  1. 通过设置标签class值控制标签的显示与隐藏

    需求背景如下: 原项目居民.单位.计量三模块共用一个jsp文件,显示的页面也顺理成章的统一了,幸亏没有调用同一个js,在此基础上要求居民和单位计量的分离,即居民的显示居民的相关信息,单位和计量的显示相 ...

  2. Android实现换肤功能(一)

    上周有个朋友给建议说讲讲换肤吧,真巧这周公司的工作安排也有这个需求,换的地方之多之繁,让人伤神死了.正所谓磨刀不误砍柴工,先磨下刀,抽出一个工具类,写了个关于换肤的简单demo. Android中换肤 ...

  3. sql 语句中 id&lt ;SELECT * FROM t_blog WHERE id&lt;#{id} ORDER BY id DESC LIMIT 1

  4. MAC 通过brew安装软件

    1.安装brew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/instal ...

  5. git 简单使用规范

    分支管理办法 创建一个主仓库dev 每个成员fork一份dev分支 在自己fork出来的代码里做开发 开发完成后发出一个合并请求 pull request,等待被其他有合并权限的同事合并代码,合并代码 ...

  6. unity, Global和Local编辑模式

    下图表示是在Local模式下: 下图表示是在Global模式下: 不要搞反.

  7. Newton&#39;s method Drawback and advantage

     Newton Raphson Method: Advantages and Drawbacks:   v=QwyjgmqbR9s" target="_blank"& ...

  8. 关于scut在unity上的主动推送

    自带的samples里面,chat的例子涉及主动推送,可作为参考. 在unity里面接收主动推送用Net.CommonCallback 服务端最近的新版本更改了接口,有两种方法推送: ActionFa ...

  9. android逆向分析之smali语法

    一 .smali数据类型 1.Dalvik字节码 Davlik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用2个连续的寄存器表示: Dalvik字节码有两种类型 ...

  10. spring quartz定时任务 配置

    cronExpression表达式: 字段 允许值 允许的特殊字符秒 0-59 , - * /分 0-59 , - * /小时 0-23 , - * /日期 1-31 , - * ? / L W C月 ...