很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。

不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

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

  1. 5 6
  2. 1 2 3 4 5
  3. Q 1 5
  4. U 3 6
  5. Q 3 4
  6. Q 4 5
  7. U 2 9
  8. Q 1 5

Sample Output

  1. 5
  2. 6
  3. 5
  4. 9

  5. 经过两道题的磨练,终于可以手搓了!细节需要注意一下
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <string>
  7. #include <vector>
  8. #include <set>
  9. #include <map>
  10. #include <queue>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <stack>
  14. using namespace std;
  15. #define FO freopen("in.txt","r",stdin);
  16. #define rep(i,a,n) for (int i=a;i<n;i++)
  17. #define per(i,a,n) for (int i=n-1;i>=a;i--)
  18. #define pb push_back
  19. #define mp make_pair
  20. #define all(x) (x).begin(),(x).end()
  21. #define fi first
  22. #define se second
  23. #define SZ(x) ((int)(x).size())
  24. #define debug(x) cout << "&&" << x << "&&" << endl;
  25. #define lowbit(x) (x&-x)
  26. #define mem(a,b) memset(a, b, sizeof(a));
  27. typedef vector<int> VI;
  28. typedef long long ll;
  29. typedef pair<int,int> PII;
  30. const ll mod=;
  31. const int inf = 0x3f3f3f3f;
  32. ll powmod(ll a,ll b) {ll res=;a%=mod;for(;b;b>>=){if(b&)res=res*a%mod;a=a*a%mod;}return res;}
  33. ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
  34. //head
  35.  
  36. const int N=;
  37. int n,m,a[N<<],maxx[N<<],pos,val,ans;
  38.  
  39. void Pushup(int rt) {
  40. maxx[rt]=max(maxx[rt<<],maxx[rt<<|]);
  41. }
  42.  
  43. void build(int rt,int L,int R) {
  44. if(L==R) {
  45. scanf("%d",&a[rt]);
  46. maxx[rt]=a[rt];//这里是rt的维护信息
  47. return;
  48. }
  49. int mid=(L+R)>>;
  50. build(rt<<,L,mid);
  51. build(rt<<|,mid+,R);
  52. Pushup(rt);
  53. }
  54.  
  55. void Updata(int rt,int L,int R,int pos,int val) {
  56. if(L==R) {//修改
  57. a[rt]=val;
  58. maxx[rt]=a[rt];
  59. return;
  60. }
  61. int mid=(L+R)>>;
  62. if(pos<=mid) Updata(rt<<,L,mid,pos,val);
  63. else Updata(rt<<|,mid+,R,pos,val);
  64. Pushup(rt);
  65. }
  66.  
  67. void Query(int rt,int L,int R,int l,int r) {//维护最大值
  68. if(L>=l&&R<=r) {
  69. ans=max(ans,maxx[rt]);
  70. return;
  71. }
  72. int mid=(L+R)>>;
  73. if(l<=mid) Query(rt<<,L,mid,l,r);
  74. if(r>mid) Query(rt<<|,mid+,R,l,r);
  75. }
  76.  
  77. int main() {
  78. while(~scanf("%d%d",&n,&m)) {
  79. build(,,n);
  80. char s[];
  81. while(m--) {
  82. ans=-;
  83. scanf("%s%d%d",s,&pos,&val);
  84. if(s[]=='Q') {
  85. Query(,,n,pos,val);
  86. printf("%d\n",ans);
  87. } else Updata(,,n,pos,val);
  88. }
  89. }
  90. }
  1.  

kuangbin专题七 HDU1754 I Hate It (单点修改维护最大值)的更多相关文章

  1. kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)

    During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...

  2. kuangbin专题七 POJ3468 A Simple Problem with Integers (线段树或树状数组)

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...

  3. kuangbin专题七 HDU1166 敌兵布阵 (线段树或树状数组)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  4. kuangbin专题七 HDU3974 Assign the task (dfs时间戳建树)

    There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...

  5. kuangbin专题七 ZOJ1610 Count the Colors (灵活线段树)

    Painting some colored segments on a line, some previously painted segments may be covered by some th ...

  6. kuangbin专题七 HDU4027 Can you answer these queries? (线段树)

    A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use ...

  7. kuangbin专题七 POJ3264 Balanced Lineup (线段树最大最小)

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...

  8. kuangbin专题七 HDU1698 Just a Hook (区间设值 线段树)

    In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. T ...

  9. HDU 1166 【线段树 || 树状数组,单点修改 维护区间和】

    题目链接 HDU 1166 大概题意: 第一行一个整数T,表示有T组数据.每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工 ...

随机推荐

  1. composer update的错误使用以及如何更新composer.lock文件

    用composer update装包是错误的. 安装包标准的方法应该是 require ,或者手动写 compose.json 文件,然后 composer install .如果只是需要更新 com ...

  2. springboot整合mybatis+generator

    源码地址:springboot-integration 如果你觉得解决了你使用的需求,欢迎fork|star.

  3. css之content

    content 属性与 :before 及 :after 伪元素配合使用,来插入生成内容.该属性用于定义元素之前或之后放置的生成内容.默认地,这往往是行内内容,不过该内容创建的框类型可以用属性 dis ...

  4. 关于android中,菜单按钮点击事件首次执行之后再次执行需要双击按钮的问题

    有时候在获取事件的时候,需要双击才能获取,解决方法很简单,把返回值设为true,那么这个事件就不会再分发了,我预计是设为其他值会继续分发,造成事件的相应混乱

  5. css样式文件命名规范

    样式文件命名规范 主要 master.css, style.css, main.css 布局 layout.css 专栏 columns.css 文字 font.css 打印 print.css 主题 ...

  6. Java界面设计

    ---------------siwuxie095                             Java SE(Java Standard Edition) 即 Java 标准版, 一般也 ...

  7. php中用大括号把?>和<?php框起来的作用

    <?php function my_function() { ?> My function was called <!--就是这里,为什么前面要用?>和< ?php 把M ...

  8. 为什么一些公司把dwg文件转化为pdf

    是因为dwg文件中可能会涉及到字体问题 这台电脑打开dwg没问题,另一台电脑可能没有相应的字体用autocad打开就会出现乱码,所以先转化为pdf,而pdf有固定格式的作用,能够保证一台电脑打开是什么 ...

  9. 3.4PCL中异常处理机制

    1.开发者如何增加一个新的异常类 2.如何使用自定义的异常 3.异常的处理

  10. SDUT 3361 数据结构实验之图论四:迷宫探索

    数据结构实验之图论四:迷宫探索 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 有一个地下迷 ...