HDU - 1754 线段树-单点修改+询问区间最大值
这个也是线段树的经验问题,待修改的,动态询问区间的最大值,只需要每次更新的时候,去把利用子节点的信息进行修改即可以。
注意更新的时候区间的选择,需要对区间进行二分。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxx = ;
int b[maxx];
struct node{
int l;
int r;
int mid;
int high;
}a[maxx*];
void pushup(int root){
a[root].high=max(a[root*].high,a[root*+].high);//把修改往上传递
}
void buildtree(int root,int l,int r){
a[root].l=l;
a[root].r=r;
if(l==r){//到叶子节点
a[root].high=b[l];
return;
};
int mid=(l+r)/;
buildtree(root*,l,mid);//注意不要写错
buildtree(root*+,mid+,r);
pushup(root);//把叶子节点的信息给传递上去
}
void update(int root,int pos,int c){//单点修改
int l=a[root].l;
int r=a[root].r;
if(l==r){
a[root].high=c;//修改
return;
};
int mid=(l+r)/;
if(pos<=mid){
update(root*,pos,c);
}else {
update(root*+,pos,c);
}
pushup(root);
}
int query(int root,int ql,int qr){//询问的区间是不变的,因为每次要判断
int l=a[root].l;
int r=a[root].r;
int mid=(l+r)/;
int high=;
if(ql<=l && r<=qr){//如果询问区间是完全大于当前节点表示的区间直接返回当前节点的信息
return a[root].high;
}
//那么代表询问区间和当前节点表示的区间有交集,当前节点的区间信息中只有一部分是我们想到得到的
if(ql<=mid){//因此我们需要对区间节点二分毕竟建树就是这么建立的
high=query(root*,ql,qr);//如果这个询问左边界范围是在中间节点的左边,我们需要询问进一步询问左儿子节点
};
if (qr>mid){//如果这个询问的右边界是在中间节点的右边,我们需要进一步询问右儿子节点
high=max(high,query(root*+,ql,qr));
}
return high;
}
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
for (int i=;i<=n;i++){
scanf("%d",&b[i]);
}
buildtree(,,n);
int tmp1,tmp2;
char op;
for (int i=;i<=m;i++){
scanf(" %c%d%d",&op,&tmp1,&tmp2);
if (op=='Q'){
int ans=query(,tmp1,tmp2);
printf("%d\n",ans);
}else {
update(,tmp1,tmp2);
}
}
}
return ;
}
HDU - 1754 线段树-单点修改+询问区间最大值的更多相关文章
- hdu 1754 线段树 单点更新 动态区间最大值
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...
- I Hate It HDU - 1754 线段树 单点修改+区间最值
#include<iostream> #include<cstring> using namespace std; ; int m,n,p; struct node{ int ...
- HDU1754 —— I Hate It 线段树 单点修改及区间最大值
题目链接:https://vjudge.net/problem/HDU-1754 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜 ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1166 敌兵布阵 (线段树单点修改和区间和查询)
Input 第一行一个整数T,表示有T组数据.每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1 ...
- hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1754 线段树(Max+单点修改)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
随机推荐
- 移动端 input样式在安卓与ios上不同的解决方案
input{ -webkit-appearance:none; }
- uv-pv-vv的区别
UV(unique visitor) 是指自然人登录自己账号访问量 KPI是指UV PV (Page View) 是指网页的浏览量 vv(Visitor view) 是指每次登录网站的访问次数 uv- ...
- Win 10 启用Linux子系统---Kali 和Ubuntu子系统
注:转载请注明出处,谢谢!!! 一.Linux on Windows简介 Win10一周年版推出了用于Windows的Linux子系统这一功能.Linux子系统和Windows的结合真是有一种神互补. ...
- win10升级后蓝牙不见了,设备管理器里没有,多了个串行控制器里的未知USB设备?
win10更新后,蓝牙功能不见了,也没有打开的选项,设备管理器里也没有,多了个未知USB设备,重启无效,重装蓝牙驱动无效,BIOS中的Bluetooth是开的. 试了网上能找到的所有方法,包括更新wi ...
- LeetCode算法题-Intersection of Two Linked Lists(Java实现)
这是悦乐书的第178次更新,第180篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第37题(顺位题号是160).编写程序以找到两个单链表交叉的节点.例如: 以下两个链表: ...
- 数据结构【查找】—平衡二叉树AVL
/*自己看了半天也没看懂代码,下次再补充说明*/ 解释: 平衡二叉树(Self-Balancing Binary Search Tree 或Height-Balanced Binary Search ...
- Word中的通配符随意组合进行批量替换或删除某些内容
长文档需要批量修改或删除某些内容的时候,我们可以利用Word中的通配符来搞定这一切,当然,前提是你必须会使用它.通配符的功能非常强大,能够随意组合替换或删除我们定义的规则内容,下面易老师就分享一些关于 ...
- jdk旧版本下载
如何找到旧版本的jdk: 1.去oracle官网关于下载jdk的这一板块,https://www.oracle.com/technetwork/java/javase/downloads/index. ...
- 第一次使用Open Live Writer维护BlogJava
换了电脑,又重装了一堆东西,现在才把Open Live Writer整好.顺便记下几个心得: Open Live Writer已经没办法从网站上下载了,介绍个方法,可以把地址直接拷贝到迅雷里面,然后请 ...
- adb install与pm install 区别
“adb install xx.apk”= “adb push xx.apk /data/local/tmp”+“pm install /data/local/tmp/xx.apk”. “adb in ...