题目背景

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

题目描述

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

输入输出格式

输入格式:

第一行,有两个正整数 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'的时候,表示这是一条更新操作,如果当前A学生的成绩低于B,则把ID为A的学生的成绩更改为B,否则不改动。

输出格式:

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

输入输出样例

输入样例#1:

  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
输出样例#1:

  1. 5
  2. 6
  3. 5
  4. 9
  5.  
  6. 思路:
      裸线段树
  7.  
  8. 来,上代码:
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. class T_tree {
  8. public:
  9. int l,r,dis,flag,mid;
  10.  
  11. bool if_;
  12.  
  13. void mid_()
  14. {
  15. mid=(l+r)>>;
  16. }
  17.  
  18. void flag_()
  19. {
  20. flag=;
  21. }
  22.  
  23. void dis_()
  24. {
  25. scanf("%d",&dis);
  26. }
  27. };
  28. class T_tree tree[*+];
  29.  
  30. int n,m;
  31.  
  32. inline int max(int SOME_THING_1,int SOME_THING_2)
  33. {
  34. if(SOME_THING_1>SOME_THING_2) return SOME_THING_1;
  35. else return SOME_THING_2;
  36. }
  37.  
  38. inline void tree_up(int now)
  39. {
  40. tree[now].dis=max(tree[now<<].dis,tree[now<<|].dis);
  41. }
  42.  
  43. void tree_build(int now,int l,int r)
  44. {
  45. tree[now].l=l,tree[now].r=r;
  46. if(l==r)
  47. {
  48. tree[now].dis_();
  49. return ;
  50. }
  51. tree[now].mid_();
  52. tree_build(now<<,l,tree[now].mid);
  53. tree_build(now<<|,tree[now].mid+,r);
  54. tree_up(now);
  55. }
  56.  
  57. int tree_query(int now,int l,int r)
  58. {
  59. if(tree[now].l==l&&tree[now].r==r)
  60. {
  61. return tree[now].dis;
  62. }
  63. if(l>tree[now].mid) return tree_query(now<<|,l,r);
  64. else if(r<=tree[now].mid) return tree_query(now<<,l,r);
  65. else
  66. {
  67. int sum_=-;
  68. sum_=max(tree_query(now<<,l,tree[now].mid),sum_);
  69. sum_=max(tree_query(now<<|,tree[now].mid+,r),sum_);
  70. return sum_;
  71. }
  72. }
  73.  
  74. void tree_change(int now,int to,int dis)
  75. {
  76. if(tree[now].l==to&&tree[now].l==tree[now].r)
  77. {
  78. tree[now].dis=max(tree[now].dis,dis);
  79. return ;
  80. }
  81. if(tree[now].mid<to) tree_change(now<<|,to,dis);
  82. else tree_change(now<<,to,dis);
  83. tree_up(now);
  84. }
  85.  
  86. int main()
  87. {
  88. scanf("%d%d",&n,&m);
  89. tree_build(,,n);
  90. char ty;
  91. int l,r;
  92. for(int i=;i<=m;i++)
  93. {
  94. cin>>ty;
  95. scanf("%d%d",&l,&r);
  96. if(ty=='Q')
  97. {
  98. printf("%d\n",tree_query(,l,r));
  99. }
  100. else
  101. {
  102. tree_change(,l,r);
  103. }
  104. }
  105. return ;
  106. }

AC日记——I Hate It 洛谷 P1531的更多相关文章

  1. AC日记——[SDOI2015]星际战争 洛谷 P3324

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  2. AC日记——联合权值 洛谷 P1351

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  3. AC日记——神奇的幻方 洛谷 P2615(大模拟)

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  4. AC日记——[CQOI2009]DANCE跳舞 洛谷 P3153

    [CQOI2009]DANCE跳舞 思路: 二分+最大流: 代码: #include <cstdio> #include <cstring> #include <iost ...

  5. AC日记——松江1843路 洛谷七月月赛

    松江1843路 思路: 三分: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #define ...

  6. AC日记——严酷的训练 洛谷 P2430

    严酷的训练 思路: 背包: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 5005 int n,m,bi[m ...

  7. AC日记——[SDOI2010]大陆争霸 洛谷 P3690

    [SDOI2010]大陆争霸 思路: dijkstra模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn ...

  8. AC日记——小魔女帕琪 洛谷 P3802

    小魔女帕琪 思路: 概率公式计算: 代码: #include <bits/stdc++.h> using namespace std; ],sig; int main() { ;i< ...

  9. AC日记——双栈排序 洛谷 P1155

    双栈排序 思路: 二分图染+模拟: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #define ...

随机推荐

  1. 使用js批量选中功能实现更改数据库中的status状态值(批量展示)

    我们在开发项目的时候经常会在后台管理时用到批量展示功能来动态的修改数据库的值.下面以修改数据库的status状态值来实现批量展示功能.批量选中功能引用js来实现.前端html代码: <table ...

  2. header('Location:'.C('VIP_HX').'/CmdId/'.$CmdId.'/user_id/'.$user_id.'/Token/'.$Token);

    利用header函数做跳转,跳转至C('VIP_HX')配置文件中VIP_HX的地址下,携带参数CmdId 值为 $CmdIduser_id 值为 $user_idToken 值为 $Token th ...

  3. OneThink-nav标签

    /* 导航列表 */ public function _nav($tag, $content){ trace($tag); trace($content); trace("end" ...

  4. GJM : Unity调用系统窗口选择本地文件

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  5. jQuery演示8种不同的图片遮罩层动画效果

    效果预览 下载地址 jQuery插件大全 实例代码 <div class="container"> <h1>jQuery图标和文章动画效果</h1&g ...

  6. 深入理解和应用display属性(二)

    四.inline-block 此类元素是inline + block的合体 1) margin和padding都有效:width和height都有效: .inline{ display: inline ...

  7. 又到周末了,我们一起来研究【浏览器如何检测是否安装app】吧

    前言 扯淡 这个月比较倒霉,我送了女朋友一台笔记本电脑作为生日礼物,结果15天一过电脑就坏了,悲剧的我还把电脑盒子给扔了!淘宝不给换更不给退 于是被女朋友臭骂了一过星期后,今天本来在公司有任务的,但是 ...

  8. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法

    使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为使用 ASP.NET 4.0,按 F1 可了 ...

  9. Android细笔记--ContentProvider

    Provider的不常见访问方式 Batch access:访问ContentProvider的一中模式,使用该模式可以同时对provider进行多个操作,且支持同时操作多个表.使用时首先构建一个Co ...

  10. JavaWeb结合七牛云存储搭建个人相册服务

    JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应 ...