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=+;
  7. struct tree{
  8. int l, r, maxn;
  9. };
  10. tree t[N*];
  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) >> ;
  23. build(m<<, l, mid);
  24. build(m<<|, mid+, r);
  25. t[m].maxn = max(t[m<<].maxn, t[m<<|].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) >> ;
  35. if(a <= mid)
  36. U(m<<, a, b);
  37. else
  38. U(m<<|, a, b);
  39. t[m].maxn = max(t[m<<].maxn, t[m<<|].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) >> ;
  49. if(r <= mid)
  50. Q(m<<, l, r);
  51. else if(l >= mid + )
  52. Q(m<<|, l, r);
  53. else
  54. {
  55. Q(m<<, l, mid);
  56. Q(m<<|, mid+, r);
  57. }
  58. }
  59. int main()
  60. {
  61. int n, m;
  62. while(scanf("%d%d", &n, &m)!=EOF)
  63. {
  64. build(, , n);
  65. for(int i=;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 = ;
  75. Q(, a, b);
  76. printf("%d\n", ans);
  77. }
  78. else
  79. U(, a, b);
  80. }
  81. }
  82. return ;
  83. }

线段树模板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. python--自己实现的单链表常用功能

    最近一个月,就耗在这上面吧. 很有收获的. # coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = ...

  2. 将input或textarea设置为disabled的样式问题

    input:disabled{ -webkit-text-fill-color: #333;//是用来做填充色使用的 -webkit-opacity: 1; color: #333; } textar ...

  3. web实现下拉列表多选加搜索

    实现如图所示的下拉多选还能带有搜索功能. <!DOCTYPE html> <html> <head> <title></title> < ...

  4. html5的audio实现高仿微信语音播放效果Demo

    HTML部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  5. PHP加密解密方法,使用openssl加密解密

    /** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...

  6. linux中查看http各种状态数量

    转自: http://www.cnblogs.com/wayne173/p/5652043.html 我们的网站部署在linux的服务器上,特别是web服务器,我们可能有时候做为运维人员,肯定是要查看 ...

  7. Manager解决Process进程之间的数据访问

    import multiprocessing mgr = mutiprocessing.Manager() 开启一个守护子进程,并返回用来与其通信的管理器 share_list = mgr.list( ...

  8. 富文本编辑器上传图片需要配置js,后台代码

    富文本编辑器上传图片需要配置js,后台代码

  9. SORT--不要仅限于题目中

    输入n,m 表示输入n个数输出前m个最大的数 Input The input file contains many test cases. Each case has 2 lines. The fir ...

  10. MySql与python交互

    No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=c ...