题目背景

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

题目描述

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

输入输出格式

输入格式:

第一行,有两个正整数 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. 个人项目框架搭建 -- Autofac简单使用记录

    1.添加autofac相关程序集/使用Nuget 2.引入命名空间 using Autofac; using Autofac.Configuration; 3.使用 3.1:直接使用 var buil ...

  2. 2分钟在eclipse下使用SpringBoot搭建Spring MVC的WEB项目

    1. 首先用eclipse创建一个maven工程, 普通maven工程即可 2. 修改pom如下: <?xml version="1.0" encoding="UT ...

  3. (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...

  4. 使用jenkins配置.net mvc网站进行持续集成一

    最近好久没有更新文章了,因为好久没有写代码了,以至于我不知道同大家分享些什么,刚好,今天突然叫我学习下jenkins每日构建,我就把今天的学习笔记记录下来,这其中很多东西都是公司同事之前调研总结的,我 ...

  5. java web学习总结(十) -------------------HttpServletRequest对象

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  6. tomcat 自定义classpath(亲自测试)

    因为一直以来使用tomcat和weblogic作为应用服务器为主,最近在升级新中间件的过程中遇到一个问题,我们的web前端应用现在升级是进行全量包升级的,因为现在的系统架构为前端和后端通过rpc框架交 ...

  7. webstorm+react+webpack-demo

    序言:通过这个小例子你也许.大概.可能会掌握以下几点 1.webstorm如何使用命令行 2.如何使用webpack的loaders把json格式的文件转化为javascript文件 3.如何使用不同 ...

  8. TinyMCE添加图片 路径自动处理成相对路径

    默认情况下会自动转换你的图片路径如: 转换: /path/name.jpg 为 ../path/name.jpg 带有域名的路径也会被转换为相对路径. 需要修改一个设置convert_urls,官方文 ...

  9. SharePoint 2013 入门教程之创建页面布局及页面

    在SharePoint的使用过程中,页面布局和页面时很重要的两个概念,主要用于数据个性化展示,下面,我们简单介绍一下SharePoint的页面布局和页面的个性化. 一. SharePoint页面模型概 ...

  10. SharePoint 2013 新建网站集图解

    前言:接触SharePoint的人可能是越来越多,但是很多人一接触就很迷茫,在技术群里问如何新建网站集,这样一篇图解,帮助新手学习在搭建好SharePoint环境之后,如何创建一个网站集,做一个基本的 ...