最高分是多少

比眉伴天荒 2022-08-05 13:16 253阅读 0赞

1111: 最高分是多少

时间限制: 1 Sec

内存限制: 32 MB

提交: 313

解决: 71

提交 状态

题目描述

老师想知道从某某同学到某某同学当中,分数最高的是多少。
现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

输入

输入包含多组测试数据。
每组输入第一行是两个正整数N和M(0<N<=30000,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。

输出

对于每一次询问操作,在一行里面输出最高成绩。

样例输入

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

样例输出

5

6

5

9

提示

线段树不解释!

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. #define lson l,m,rt<<1
  5. #define rson m+1,r,rt<<1|1//相当于(rt>>1)+1
  6. const int maxn=30010;
  7. int MAX[maxn<<2];
  8. void pushup(int rt)
  9. {
  10. MAX[rt]=max(MAX[rt<<1],MAX[rt<<1|1]);
  11. }
  12. void build(int l,int r,int rt)
  13. {
  14. if(l==r)
  15. {
  16. scanf("%d",&MAX[rt]);
  17. return;
  18. }
  19. int m=(l+r)>>1;
  20. build(lson);
  21. build(rson);
  22. pushup(rt);
  23. }
  24. void update(int p,int sc,int l,int r,int rt)
  25. {
  26. if(l==r)
  27. {
  28. MAX[rt]=sc;
  29. return;
  30. }
  31. int m=(l+r)>>1;
  32. if(p<=m)
  33. {
  34. update(p,sc,lson);
  35. }
  36. else
  37. {
  38. update(p,sc,rson);
  39. }
  40. pushup(rt);
  41. }
  42. int query(int L,int R,int l,int r,int rt)
  43. {
  44. int p1,p2;
  45. if(l>R||r<L)
  46. {
  47. return -1;
  48. }
  49. if(L<=l&&r<=R)
  50. {
  51. return MAX[rt];
  52. }
  53. int m=(l+r)>>1;
  54. p1=query(L,R,lson);
  55. p2=query(L,R,rson);
  56. if(p1==-1)
  57. {
  58. return p2;
  59. }
  60. if(p2==-1)
  61. {
  62. return p1;
  63. }
  64. return max(p1,p2);
  65. }
  66. int main()
  67. {
  68. int n,m,a,b;
  69. char c[20];
  70. while(scanf("%d%d",&n,&m)!=EOF)
  71. {
  72. build(1,n,1);
  73. while(m--)
  74. {
  75. scanf("%s%d%d",&c,&a,&b);
  76. if(c[0]=='Q')
  77. {
  78. printf("%d\n",query(a,b,1,n,1));
  79. }
  80. else
  81. {
  82. update(a,b,1,n,1);
  83. }
  84. }
  85. }
  86. }

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读