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代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 const int N=200000+50;
 7 struct tree{
 8     int l, r, maxn;
 9 };
10 tree t[N*3];
11 int ans;
12
13 void build(int m, int l, int r)
14 {
15     t[m].l = l;
16     t[m].r = r;
17     if(l==r)
18     {
19         scanf("%d", &t[m].maxn);
20         return;
21     }
22     int mid = (l + r) >> 1;
23     build(m<<1, l, mid);
24     build(m<<1|1, mid+1, r);
25     t[m].maxn = max(t[m<<1].maxn, t[m<<1|1].maxn);
26 }
27 void U(int m, int a, int b)
28 {
29     if(t[m].l == t[m].r && t[m].l == a)
30     {
31         t[m].maxn = b;
32         return;
33     }
34     int mid = (t[m].l + t[m].r) >> 1;
35     if(a <= mid)
36         U(m<<1, a, b);
37     else
38         U(m<<1|1, a, b);
39     t[m].maxn = max(t[m<<1].maxn, t[m<<1|1].maxn);
40 }
41 void Q(int m, int l, int r)
42 {
43     if(t[m].l == l && t[m].r == r)
44     {
45         ans = max(ans, t[m].maxn);
46         return;
47     }
48     int mid = (t[m].l + t[m].r) >> 1;
49     if(r <= mid)
50         Q(m<<1, l, r);
51     else if(l >= mid + 1)
52         Q(m<<1|1, l, r);
53     else
54     {
55         Q(m<<1, l, mid);
56         Q(m<<1|1, mid+1, r);
57     }
58 }
59 int main()
60 {
61     int n, m;
62     while(scanf("%d%d", &n, &m)!=EOF)
63     {
64         build(1, 1, n);
65         for(int i=0;i<m;i++)
66         {
67             getchar();
68             char c;
69             int a, b;
70             scanf("%c", &c);
71             scanf("%d%d", &a, &b);
72             if(c == 'Q')
73             {
74                 ans = 0;
75                 Q(1, a, b);
76                 printf("%d\n", ans);
77             }
78             else
79                 U(1, a, b);
80         }
81     }
82     return 0;
83 }

View Code

转载于:https://www.cnblogs.com/sqdtss/p/9437786.html

线段树模板hdu 1754:I Hate It相关推荐

  1. hdu1156(简单线段树 模板题)

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

  2. hdu1754 I hate it线段树模板 区间最值查询

    题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...

  3. 【AHOI2009】【BZOJ1798】Seq 维护序列seq(线段树模板,易错提醒)

    problem 给定一个长为n的序列,m次询问 每次询问有3种操作 1.一段区间全部乘一个值 2.一段区间全部加一个值 3.询问一段区间和%P solution 不就一颗线段树么,看朕10分钟A掉.. ...

  4. 洛谷3373 线段树模板

    题目详情:https://www.luogu.org/problemnew/show/P3373 这个线段树模板写的头疼(最后纠错发现一个long long没开差点一口血喷出来),思路就是在普通的求区 ...

  5. ccf除法-线段树模板

    这题的要求是对区间处理,查询区间和,一看就是线段树模板题,下面是代码 #include<iostream> using namespace std; int pp[100001]; str ...

  6. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

  7. 线段树模板题3:区间染色问题

    1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...

  8. Just a Hook(线段树模板)

    题意 n个铜棒子,对其进行区间修改,将区间中的棒子价值增加,问最后所有棒子的总价值是多少. 铜棒:1 银棒:2 金棒:3 思路 线段树模板题 建树时,每个节点值都为1,对其进行区间修改 最后输出根节点 ...

  9. ACM算法-----线段树模板

    上模板: const int MAX = 999999; struct treenode {int val;//树节点值int right, left;//左右区间 }tree[MAX]; int t ...

最新文章

  1. python获取本机 ip地址、mac地址(物理地址)、计算机名、硬盘序列号、CPU序列号、主板序列号、bios序列号、bios uuid号
  2. C# WinForm控件、自定义控件整理(大全)
  3. 摄像头视频推流python_摄像头视频推流装置及方法与流程
  4. 【MyBatis】MyBatis自动生成代码之查询爬坑记
  5. 可简单图化算法(Havel算法)
  6. Swoole Interview
  7. ssrs 基于表达式显示_基于表达式的访问控制
  8. oracle 存储过程获取当前日期
  9. 【程序设计】编程语言的抽象层次
  10. UG NX 12 草图技巧与方法分析
  11. js实现上传图片之后回显
  12. .net扫盲-网页对话框应用
  13. Java学习资料(四)——尚学堂马士兵视频
  14. websphere7 mysql_websphere7
  15. 计算机简史:你想不通去脉 是因为你不了解来龙
  16. linux服务器关机日期,linux服务器last查看关机记录
  17. java web编写的在线问卷系统 完整源码 下载直接运行
  18. outlook怎么删除服务器备份文件,如何彻底删除outlook的一切数据,包括账户信息和邮件...
  19. 实战 | 如何利用 Scrapy 编写一个完整的爬虫!
  20. CALIPSO数据批量下载方法

热门文章

  1. Android studio无法连接识别检测各种模拟器和手机的问题 (万能方案)。
  2. Android_高清加载巨图方案 拒绝压缩图片
  3. Java.lang.IllegalStateException Activity has been destroyed
  4. ireport 找不到子报表:Could not load object from location
  5. android 快速新建字符资源
  6. app启动速度阶段指标
  7. /proc/kcore失效,调试其文件系统相关模块,使重新正常工作
  8. C# webBrowser禁止在新窗口打开,强制在本窗口打开
  9. 2018-2019-2 20165209 《网络对抗技术》Exp4:恶意代码分析
  10. pycharm专业版(window)安装