I Hate It(线段树区间最值,单点更新)-------------蓝桥备战系列
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 
这让很多学生很反感。 
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
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 代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<cmath>
const int maxn=2e5+5;
typedef long long ll;
using namespace std;
struct node
{
	ll l,r,maxx;
}tree[maxn<<2];
void pushup(int m)
{
	tree[m].maxx=max(tree[m<<1].maxx,tree[m<<1|1].maxx);
}
void build(int m,int l,int r)
{
	tree[m].l=l;
	tree[m].r=r;
	if(l==r)
	{
		scanf("%lld",&tree[m].maxx);
		return;
	}
	int mid=(l+r)>>1;
	build(m<<1,l,mid);
	build(m<<1|1,mid+1,r);
	pushup(m);
}
void update(int m,int index,int val)
{
	if(tree[m].l==index&&tree[m].r==index)
	{
		tree[m].maxx=val;
		return;
	}
	int mid=(tree[m].l+tree[m].r)>>1;
	if(index<=mid)
	{
		update(m<<1,index,val);
	}
	else
	{
		update(m<<1|1,index,val);
	}
	pushup(m);
}
ll  query(int m,int l,int r)
{
	if(tree[m].l==l&&tree[m].r==r)
	{
		return tree[m].maxx;
	}
	int mid=(tree[m].l+tree[m].r)>>1;
	ll res=0;
	if(r<=mid)
	{
		res=query(m<<1,l,r);
	}
	else if(l>mid)
	{
		res=query(m<<1|1,l,r);
	}
	else
	{
		res=max(query(m<<1,l,mid),query(m<<1|1,mid+1,r));
	}
	return res;
}
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
    build(1,1,n);
    char op[2];
    int l,r,pos,val;
    for(int t=0;t<m;t++)
    {
    	scanf("%s",op);
    	if(op[0]=='Q')
		{
			scanf("%d%d",&l,&r);
			printf("%lld\n",query(1,l,r));
		}
		else if(op[0]=='U')
		{
			scanf("%d%d",&pos,&val);
			update(1,pos,val);
		 }
	}
	}
	return 0;
}
												
											I Hate It(线段树区间最值,单点更新)-------------蓝桥备战系列的更多相关文章
- HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
		
HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧) 题意分析 题目大意:一个h*w的公告牌,要在其上贴公告. 输入的是1*wi的w值,这些是公告的尺寸. 贴公告 ...
 - 51nod1287(二分/线段树区间最值&单点更新)
		
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1287 题意:中文题诶- 解法1:b[i] 存储 max(a[0 ...
 - 【线段树区间最值单点更新模板】BNUOJ 52965 E Excellent Engineers
		
http://acm.bnu.edu.cn/v3/external/gym/101512.pdf #include<bits/stdc++.h> using namespace std; ...
 - hdoj1754 I Hate It【线段树区间最大值维护+单点更新】
		
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
 - 【bzoj4695】最假女选手  线段树区间最值操作
		
题目描述 给定一个长度为 N 序列,编号从 1 到 N .要求支持下面几种操作:1.给一个区间[L,R] 加上一个数x 2.把一个区间[L,R] 里小于x 的数变成x 3.把一个区间[L,R] 里大于 ...
 - 【bzoj4355】Play with sequence  线段树区间最值操作
		
题目描述 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a[V]都赋值为C. 2)给出参数U,V,C,对于区间[U,V]里的每个数 ...
 - 【hdu5306】Gorgeous Sequence  线段树区间最值操作
		
题目描述 给你一个序列,支持三种操作: $0\ x\ y\ t$ :将 $[x,y]$ 内大于 $t$ 的数变为 $t$ :$1\ x\ y$ :求 $[x,y]$ 内所有数的最大值:$2\ x\ y ...
 - cf834D(dp+线段树区间最值,区间更新)
		
题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...
 - HDU-1754I Hate It   线段树区间最值
		
这道题比较基本,就是用线段树维护区间最值,可以算是模板吧-.. I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768 ...
 
随机推荐
- LoadRunner Controller
			
1.Controller的引入 1)需要Controller的原因?需要多个用户来模拟并发的时候. 2)一种强大的.成熟的工具的体现. 2. Controller的启动方式 1)LoadRunner ...
 - selenium使用ChromeDriver
			
什么是ChromeDriver? ChromeDriver是Chromium team开发维护的,它是实现WebDriver有线协议的一个单独的服务.ChromeDriver通过chrome的自动代理 ...
 - fiddler抓包时显示Tunnel to......443
			
打开手机浏览器,输入http://192.168.0.65:8888/FiddlerRoot.cer
 - 十四课 slam&gmapping
			
gmapping 根据激光数据(或者深度数据模拟的激光数据)建立地图,在turtlebot里面应用的就是深度数据模拟的激光数据.如果没有激光雷达的话可以使用Kinect. SLAM 机器人在未知环境中 ...
 - Go程序设计3——并发编程
			
1 channel 一般channel的声明形式为: var chanName chan ElementType 与一般的变量声明不同的地方仅仅是在类型之前增加了chan关键字.ElementType ...
 - 智能IC卡中的文件系统
			
1.文件系统是COS的重要模块之一,它负责组织.管理.维护IC卡内存储的所有数据. 文件系统的设计和实现既是COS系统中最灵活.最有个性的部分,也是对系统整体结构影响最大的模块之一. 2.在IC卡内, ...
 - Sort函数(C++)
			
原创 C++中内置了sor函数供排序,函数原型为: #include<algorithm> //所属头文件 sort(begin,end,cmp); //其中cmp参数可以省略,省略后默认 ...
 - C# - dynamic 特性
			
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性. 比如,即使 ...
 - HTML5+CSS3从入门到精通 中文pdf版
			
HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指南.高级程序设计.开发指南同类图书,本书是一本适合快速入手的 ...
 - .Net高级面试宝典
			
1.in/exists/join 执行效率? 答:用法 select * from HK_UsersBasic where Users_ID in (select AccEmail from dbo ...