I Hate It

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

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

Hint

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

 1 /*******************************
 2
 3 Date    : 2015-11-17 21:40:22
 4 Author  : WQJ (1225234825@qq.com)
 5 Link    : http://www.cnblogs.com/a1225234/
 6 Name     : HD1754
 7
 8 ********************************/
 9 #include <iostream>
10 #include <cstdio>
11 #include <algorithm>
12 #include <cmath>
13 #include <cstring>
14 #include <string>
15 #include <set>
16 #include <vector>
17 #include <queue>
18 using namespace std;
19 const int Max=200000+5;
20 int sc[Max],segTree[Max<<2];
21 int l,r;
22 int build(int node,int begin,int end)
23 {
24     int mid=(begin+end)/2;
25     if(begin==end)    segTree[node]=sc[end];
26     else{
27         build(node*2,begin,mid);
28         build(node*2+1,mid+1,end);
29         segTree[node]=max(segTree[node*2],segTree[node*2+1]);
30     }
31     return 0;
32 }
33 int query(int node,int begin,int end)
34 {
35     int p1,p2;
36     int mid=(begin+end)/2;
37     if(r<begin||l>end)    return -1;
38     if(l<=begin&&end<=r)
39         return segTree[node];
40     p1=query(node*2,begin,mid);
41     p2=query(node*2+1,mid+1,end);
42     if(p1==-1)    return p2;
43     if(p2==-1)    return p1;
44     return max(p1,p2);
45 }
46 int updata(int node,int begin,int end,int pos,int e)
47 {
48     int mid=(begin+end)/2;
49     if(begin==end)
50     {
51         segTree[node]=e;
52         return 0;
53     }
54     if(pos<=mid)
55         updata(node*2,begin,mid,pos,e);
56     else
57         updata(node*2+1,mid+1,end,pos,e);
58     segTree[node]=max(segTree[node*2],segTree[node*2+1]);
59     return 0;
60 }
61 int main()
62 {
63     int N,M;
64     int i,j,k,e;
65     char ch;
66     freopen("in.txt","r",stdin);
67     while(scanf("%d%d",&N,&M)!=EOF)
68     {
69         memset(segTree,0,sizeof(segTree));
70         for(i=0;i<N;i++)
71         {
72             scanf("%d",&e);
73             sc[i]=e;
74         }
75         build(1,0,N-1);
76         //for(i=0;i<20;i++)
77         //    cout<<segTree[i]<<" ";
78         for(i=0;i<M;i++)
79         {
80             int a,b;
81             getchar();
82             scanf("%c%d%d",&ch,&a,&b);
83             if(ch=='Q')
84             {
85                 l=a-1,r=b-1;
86                 cout<<query(1,0,N-1)<<endl;
87             }
88             else if(ch=='U')
89             {
90                 updata(1,0,N-1,a-1,b);
91             }
92         }
93     }
94     return 0;
95 }

转载于:https://www.cnblogs.com/a1225234/p/4973097.html

线段树(updata+query)相关推荐

  1. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  2. 线段树总结(一)【数据结构】

    最近学线段树,先来总结一下知道的基础知识.感觉这东西很灵活. 自己现在的理解就是线段树是来维护一个序列的区间查找与修改操作的数据结构,我觉得学好它可能更容易理解树状数组.就像有的网站上说,为什么需要线 ...

  3. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

  4. bzoj2957 奥妙重重的线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树的query和update竟然还可以结合起来用! 题意:小A的楼房外有一大片施工工地, ...

  5. ACM大牛总结的线段树专辑

    https://blog.csdn.net/qq_25605637/article/details/46967529 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章 ...

  6. 【转载】完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...

  7. 转载自杭电大牛的博客 线段树 绝对经典

    转载自:http://www.notonlysuccess.com/ 不可不看的经典 学线段树必看,大牛很多,给后人留下记录的却没有几个,谢谢这位大牛~! 因为我这最近他博客打不开了...特意从别人那 ...

  8. 线段树的进阶:多种信息的维护与传递

     山海经 时间限制:1 s   内存限制:128 MB [问题描述] "南山之首曰鹊山.其首曰招摇之山,临于西海之上,多桂,多金玉.有草焉,其状如韭而青华,其名曰祝余,食之不饥--又东三百里 ...

  9. 线段树模板(来自胡浩大牛)

    http://www.notonlysuccess.com/(今天看二叉树,想回来看看,发现大牛博客进不去...) 如果要学,就要好好学.我copy的,如有错,请看http://www.cnblogs ...

  10. 大牛整理的线段树集锦

     转载自:http://www.notonlysuccess.com/ 膜拜之... [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pk ...

最新文章

  1. 建立名称server
  2. 限定项目的 Node.js 版本
  3. System Center Virtual Machine Manager 2012 SP1系列文章
  4. 案例驱动python编程入门-用Python进行行为驱动开发的入门教程
  5. POJ 1236 学校网络间的强连通
  6. 精品思维导图,流程图模板分享
  7. 25个吸引眼球的广告设计
  8. 信息学奥赛一本通C++语言——1107:校门外的树
  9. 条件编译宏定义_C语言学习- 预处理指令2 - 条件编译
  10. Linux 安装Python3
  11. 企业微信hook,企业微信软件
  12. Java 输入输出流实验
  13. 热插拔技术详解(上)
  14. 中国最美的十大宗教名山(图)
  15. Canvas画布、SVG图片
  16. Unity Shader 扇形进度条
  17. ‘home‘ has a default child route. When navigating to this named route (:to=“{name: ‘home‘“), the def
  18. IllegalStateException: Couldn‘t read row 0, col 10 from CursorWindow. Make sure the Cursor is initi
  19. 用友系统服务器如何安装,用友数据库服务器安装步骤
  20. 保留两位小数除法算式_小学数学小数除法练习题

热门文章

  1. python计算目录大小_使用Python计算目录的大小?
  2. 单机 docker 部署fastfds_云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白...
  3. p40_数据交换方式
  4. 图(用list邻接表表示)的深度优先和广度优先(递归和非递归实现)
  5. 递归法:财务金额漏掉1笔或者几笔(排列组合)
  6. OpenGL基础32:面剔除
  7. 2018北京ICPC H. Approximate Matching(AC自动机+DP)
  8. 吴恩达神经网络和深度学习-学习笔记-6-训练集、验证集和测试集 + 偏差bias和方差variance
  9. python基础系列教程——数据结构(列表、元组、字典、集合、链表)
  10. Echarts数据可视化event图表事件的相关操作,开发全解+完美注释