线段树求区间最大值RMQ(单点更新)
题目:HDU1754
#include <stdio.h>
#define maxn 222222
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int MAX[maxn<<2];
int max(int a,int b)
{
return a>b? a:b;
}
void PushUP(int rt)
{
MAX[rt]=max(MAX[rt<<1],MAX[rt<<1|1]);
}
void Build(int l,int r,int rt)
{
if(l==r)
{
scanf("%d",&MAX[rt]);
return;
}
int m=(l+r)>>1;
Build(lson);
Build(rson);
PushUP(rt);
}
void Update(int p,int add,int l,int r,int rt)
{
if(l==r)
{
MAX[rt]=add;
return;
}
int m=(l+r)>>1;
if(p<=m)
Update(p,add,lson);
else
Update(p,add,rson);
PushUP(rt);
}
int Query(int L,int R,int l,int r,int rt)
{
if(L<=l&&R>=r)
return MAX[rt];
int m=(l+r)>>1;
int ret=0;
if(L<=m) ret=max(ret,Query(L,R,lson));
if(R>m) ret=max(ret,Query(L,R,rson));
return ret;
}
int main()
{
int N,M;
char s[5];
while(~scanf("%d%d",&N,&M))
{
Build(1,N,1);
while(M--)
{
int a,b;
scanf("%s%d%d",s,&a,&b);
if(s[0]=='Q')
printf("%d\n",Query(a,b,1,N,1));
else
Update(a,b,1,N,1);
}
}
return 0;
}
线段树求区间最大值RMQ(单点更新)相关推荐
- hdu3074 线段树求区间乘积(单点更新)
题意: 给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余. 思路: 线段树单点更新,简单题目,不多解释,具体看代码. #i ...
- 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring
题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai>aj时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...
- 线段树求区间和(单点更新)
题目1:敌兵布阵 线段树的主要操作:(1)建立线段树(Build) (2)更新区间值 (Update) (3)查询区间(Query) 写法一: #include ...
- NYOJ-备用2344 盖伦的告白(线段树,区间最大值)
题目: 2344: 盖伦的告白 时间限制: 1 秒 内存限制: 128 MB 提交: 57 解决: 20 提交 状态 题目描述 盖伦和赵信这对基友又在打赌,谁输了就去向卡特琳娜告白.. 这一 ...
- P4588 [TJOI2018]数学计算(线段树维护区间乘和单点修改)
P4588 [TJOI2018]数学计算 刚看到这题根本每想到用线段树,直接每次记录计算结果然后找到要除的数字就好了呗 但是!你会注意到,如果连续乘很多很多次,然后再除的话,如果不取模会爆 long ...
- 树状数组求区间和 和 单点更新
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- HDU 3308 线段树求区间最长连续上升子序列长度
题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...
- Marvolo Gaunt's Ring CodeForces - 855B+线段树+维护区间最大值和最小值
题目链接: Marvolo Gaunt's Ring CodeForces - 855B 题目大意: 给定一段序列:a1,a2,a3,--an, 给定三个数:p,q,r(注意数据范围,代码里ans=- ...
- Distinct Characters Queries CodeForces - 1234D(线段树求区间字母种类数)
You are given a string ss consisting of lowercase Latin letters and qq queries for this string. Reca ...
最新文章
- LeetCode实战:存在重复元素
- Ubuntu12.04安装jdk1.6.0
- Refresh your Java skills–面对Java学习过程中的一些迷茫
- 「2017 山东一轮集训 Day2」Pair (霍尔定理+线段树)
- fibonacci数列的性质(ZOJ3707)
- 【渝粤题库】广东开放大学 标准化专题讲座 形成性考核
- 自己常用的C/C++小技巧
- 命令行怎么运行go程序_Go教程32: 编译打包运行程序
- python3编码(encode,decode)
- 谷歌图像识别 API
- 互联网黑暗森林法则:想活?别喘气儿!
- 2007年个人回忆与总结
- Android USB串口摄像头实现拍照与识别二维码
- python特征提取方法_大师兄的Python机器学习笔记:特征提取
- JAVA计算机毕业设计房屋中介网络平台Mybatis+系统+数据库+调试部署
- 图片怎么自定义裁剪?图片如何裁出想要的大小?
- Expat XML parser
- 深度学习-Word Embedding的详细理解(包含one-hot编码和cos余弦相似度)
- 计算机密码学学习笔记(二)——Shannon理论
- android源码 meizhi,74款安卓和IOS app源码地址