I Hate It

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 94142    Accepted Submission(s): 35658

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
  1.  
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
  1.  
5
6
5
9


Hint

Huge input,the C function scanf() will work better than cin

 


Author
linle
 

Source
 

Recommend
lcy

线段树的一道简单题,详细看代码

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<iostream>
  4. using namespace std;
  5. #define MAXN 200010
  6.  
  7. int n, m;
  8. int a[MAXN];
  9. struct node{
  10. int l, r, max;
  11. }tree[MAXN<<2];
  12. char ch;
  13. int max(int a, int b)
  14. {
  15. if (a > b)
  16. return a;
  17. else
  18. return b;
  19. }
  20. void build(int k, int l, int r)
  21. {
  22. tree[k].l = l; tree[k].r = r;
  23. if (l == r)
  24. {
  25. tree[k].max = a[l];
  26. return;
  27. }
  28. int mid = (l + r) >> 1;
  29. build(k << 1, l, mid); build(k << 1|1, mid+1, r);
  30. tree[k].max = max(tree[k << 1].max, tree[k << 1 | 1].max);
  31. }
  32. void prework()
  33. {
  34. for (int i = 1; i <= n; i++)
  35. scanf("%d", &a[i]);
  36. memset(tree, 0, sizeof(tree));
  37. build(1, 1, n);
  38. }
  39. void change(int k, int d, int x)
  40. {
  41. if (tree[k].l == tree[k].r&&tree[k].r == d)
  42. {
  43. tree[k].max = x;
  44. return;
  45. }
  46. int mid = (tree[k].l + tree[k].r) >> 1;
  47. if (d >= tree[k].l&&d <= mid)
  48. change(k << 1, d, x);
  49. else
  50. change(k << 1 | 1, d, x);
  51. tree[k].max = max(tree[k << 1].max, tree[k << 1 | 1].max);
  52. }
  53. int query(int k, int l, int r)
  54. {
  55. int maxnum;
  56. if (tree[k].l == l&&tree[k].r == r)
  57. return tree[k].max;
  58. int mid = (tree[k].l + tree[k].r) >> 1;
  59. if (r <= mid)
  60. maxnum = query(k << 1, l, r);
  61. else if (l >= mid + 1)
  62. maxnum = query(k << 1 | 1, l, r);
  63. else
  64. maxnum = max(query(k << 1, l, mid), query(k << 1 | 1, mid+1, r));
  65. return maxnum;
  66. }
  67. void mainwork()
  68. {
  69. int d, x;
  70. for (int i = 1; i <= m; i++)
  71. {
  72. cin>>ch>>d>>x;
  73. if (ch == 'Q')
  74. printf("%d\n", query(1, d, x));
  75. else
  76. change(1, d, x);
  77. }
  78. }
  79. int main()
  80. {
  81. while (~scanf("%d%d", &n, &m))
  82. {
  83. prework();
  84. mainwork();
  85. }
  86. return 0;
  87. }

HDU - 1754 A - I Hate It 线段树的更多相关文章

  1. hdu 1754 I Hate It (模板线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others)    M ...

  2. hdu 1754 I Hate It (线段树功能:单点更新和区间最值)

    版权声明:本文为博主原创文章.未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/32982923 转载请注明出处 ...

  3. HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...

  4. hdu 1754 I Hate It (线段树)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树的模板题,详细的都写在代码里了 //不知道为什么定义单个字符,用%c输入会超时,换成字符数 ...

  5. hdu 1754:I Hate It(线段树,入门题,RMQ问题)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. HDU 1754 I Hate It(线段树)

    点我看题目 题意  :又是一道中问题,我就不说题意了.... 思路 : 线段树,这道题跟1166差不多,改一些地方就差不多了. #include <iostream> #include & ...

  7. HDU 1754 I Hate It(线段树基础应用)

    基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...

  8. HDU 1754 I Hate It(线段树之单点更新 区间最值查询)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. hdu 1754 I Hate It(线段树之 单点更新+区间最值)

    I Hate It                                                                             Time Limit: 90 ...

随机推荐

  1. windows下自动启动Redis隐藏命令行窗口

    这段时间看了看关于Redis的相关内容,对于Redis在windows下的安装和常规启动我就不多说了.可以参考其他的博客http://www.cnblogs.com/edisonchou/p/3821 ...

  2. Java并发编程原理与实战四十二:锁与volatile的内存语义

    锁与volatile的内存语义 1.锁的内存语义 2.volatile内存语义 3.synchronized内存语义 4.Lock与synchronized的区别 5.ReentrantLock源码实 ...

  3. js检测上传文件大小

    前言: 项目中经常用到需要上传文件.照片等功能,同时需要限制所上传文件的大小.很多插件都会采用后台请求验证,前端Js校验比较少.本篇介绍一个前端JS便捷判断上传文件大小的方法. 代码很简单,关键就是怎 ...

  4. shell逐行读取excel并执行sql

    背景:测试同学想根据一组user_id 获取token做测试,由于各种原因(数据量大,sql语句复杂),只能根据user_id一条条查,于是写了个脚本: 1, 先查询需要的user_id 导出到use ...

  5. TED_Topic4:How I fell in love with quasars, blazars and our incredible universe

    By Jedidah Isler # Background about our speaker Jedidah Isler studies blazars(耀变天体) — supermassive h ...

  6. JS 数组 foreach 和 map

    本文地址:http://www.cnblogs.com/veinyin/p/8794677.html  foreach 和 map 都是数组的迭代方法,对数组的每一项执行给定函数,不会改变原数组. 两 ...

  7. 外卖(food) & 洛谷4040宅男计划 三分套二分&贪心

    food评测传送门 [题目描述] 叫外卖是一个技术活,宅男宅女们一直面对着一个很大的矛盾,如何以有限的金钱在宿舍宅得尽量久.    外卖店一共有 N 种食物,每种食物有固定的价钱 Pi 与保质期 Si ...

  8. 【数据库】SQL经典面试题 - 数据库查询 - 子查询应用二

    上节课我们通过子查询,完成了查询的最高分学生的需求,今天我们来学习子查询的分类,以及通过子查询来完成工作中经常遇到一些个性化需求. 子查询概念: 一个SELECT语句嵌套在另一个SELECT语句中,子 ...

  9. python目前安装的包备份

    Package Version ------------------------------- ------------------ alembic altgraph 0.14 apistar app ...

  10. MySQL5.7之多源复制&Nginx中间件(下)【转】

    有生之年系列----MySQL5.7之多源复制&Nginx中间件(下)-wangwenan6-ITPUB博客http://blog.itpub.net/29510932/viewspace-1 ...