I Hate It

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

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
 
Recommend
lcy  &nbsp|  &nbspWe have carefully selected several similar problems for you:  1698 1542 1394 2795 1540 

分析:此题为经典线段树模板题, 标志性的更新和查询操作, 如果无数条更新和查询操作时, 想到线段树, 很可能就是一道与此题类似的线段树题欧。。

ac代码:

 #include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; const int N=+;
struct tree{
int l, r, maxn;
};
tree t[N*];
int ans; void build(int m, int l, int r)
{
t[m].l = l;
t[m].r = r;
if(l==r)
{
scanf("%d", &t[m].maxn);
return;
}
int mid = (l + r) >> ;
build(m<<, l, mid);
build(m<<|, mid+, r);
t[m].maxn = max(t[m<<].maxn, t[m<<|].maxn);
}
void U(int m, int a, int b)
{
if(t[m].l == t[m].r && t[m].l == a)
{
t[m].maxn = b;
return;
}
int mid = (t[m].l + t[m].r) >> ;
if(a <= mid)
U(m<<, a, b);
else
U(m<<|, a, b);
t[m].maxn = max(t[m<<].maxn, t[m<<|].maxn);
}
void Q(int m, int l, int r)
{
if(t[m].l == l && t[m].r == r)
{
ans = max(ans, t[m].maxn);
return;
}
int mid = (t[m].l + t[m].r) >> ;
if(r <= mid)
Q(m<<, l, r);
else if(l >= mid + )
Q(m<<|, l, r);
else
{
Q(m<<, l, mid);
Q(m<<|, mid+, r);
}
}
int main()
{
int n, m;
while(scanf("%d%d", &n, &m)!=EOF)
{
build(, , n);
for(int i=;i<m;i++)
{
getchar();
char c;
int a, b;
scanf("%c", &c);
scanf("%d%d", &a, &b);
if(c == 'Q')
{
ans = ;
Q(, a, b);
printf("%d\n", ans);
}
else
U(, a, b);
}
}
return ;
}

线段树模板hdu 1754:I Hate It的更多相关文章

  1. 线段树模板 hdu 1166 敌兵布阵

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

  2. 线段树(hdu 1754 i hate it)

    I Hate It Time Limit: 3000MS     Memory Limit: 32768 K Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分 ...

  3. 线段树模板hdu 1166:敌兵布阵

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

  4. 裸裸的线段树(hdu 1754)

    线段树的第一发. 哪天忘了还能够让自己找找回顾. 线段树操作: build  : 建树. update:点改动: query:查询 Input 在每一个測试的第一行,有两个正整数 N 和 M ( 0& ...

  5. hdu 4819 二维线段树模板

    /* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...

  6. HDU 1166 线段树模板&树状数组模板

    HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...

  7. HDU 1698 Just a Hook (线段树模板题-区间求和)

    Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...

  8. HDU1166:敌兵布阵(线段树模板)

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

  9. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

随机推荐

  1. MyBatis - 3.Mapper XML映射文件

    SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是 ...

  2. Mongodb for .Net Core 封装类库

    一:引用的mongodb驱动文件版本为 Mongodb.Driver 20.4.3 二:我只是进行了常用方法的封装,如有不当之处,请联系我 创建mongodb的连接 using MongoDB.Bso ...

  3. Java 骚操作--生成二维码

    https://www.cnblogs.com/lsy131479/p/8808172.html

  4. 关于文件I/o的原子操作

    [摘自<Linux/Unix系统编程手册>] 所有系统调用都是以原子操作方式执行的.这里是指内核保证了某系统调用中的所有步骤会作为独立操作而一次性执行,其间不会为其它进程或线程所中断. 原 ...

  5. bzoj3769 spoj 8549 BST again

    题解: 比较水的题目 普通dp其实复杂度还是比较大的 可以任意模数ntt优化.. 但好像没人写.. 代码: #include <bits/stdc++.h> using namespace ...

  6. 在启用了“编辑并继续”时,修改包含 lambda 表达式的“method”将会阻止调试会话继续进行

    将所有的引用的“复制到本地”属性都设置成false就可以了

  7. Codeforces 513E2 Subarray Cuts dp (看题解)

    我们肯定要一大一小间隔开来所以 把式子拆出来就是类似这样的形式 s1 - 2 * s2 + 2 * s3 + ...... + sn 然后把状态开成四个, 分别表示在顶部, 在底部, 在顶部到底部的中 ...

  8. Nginx报502错误,PHP最大执行时间设置

    PHP执行时间太长导致的 我在程序的最上方写了set_time_limit(0);不管用 因为max_execution_time在 php-cgi(php-fpm) 中,该参数不会起效. 真正能够控 ...

  9. 51Nod1518 稳定多米诺覆盖 动态规划 插头dp 容斥原理

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1518.html 题目传送门 - 51Nod1518 题意 51Nod真是个好OJ ,题意概括的真好, ...

  10. Python上下文管理器 with

    对于系统资源的操作,如:文件操作.数据库操作等,我们往往打开文件.连接数据库后忘了将其close掉,这时就可能会引发异常,因此我们常用的做法是: # coding:utf-8 f = open(&qu ...