HDU 3308 (线段树区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=3308
题意: 两个操作 : 1 修改 单点 a 处的值。
2 求出 区间【a,b】内的最长上升子序列。
做法:线段树区间合并。了解线段树的具体含义很容易。
1 // by caonima
2 // hehe
3 #include <cstdio>
4 #include <cstring>
5 #include <algorithm>
6 #include <vector>
7 #include <cmath>
8 using namespace std;
9 const int MAX= 1e5+;
int Lsum[MAX<<],Rsum[MAX<<],Msum[MAX<<];
int Lnum[MAX<<],Rnum[MAX<<];
int a[MAX];
char Q[];
void push_up(int o,int m) {
Lsum[o]=Lsum[o<<];
Rsum[o]=Rsum[o<<|];
Msum[o]=max(Msum[o<<],Msum[o<<|]);
Lnum[o]=Lnum[o<<];
Rnum[o]=Rnum[o<<|];
if(Rnum[o<<]<Lnum[o<<|]) {
if(Lsum[o<<]==(m-(m>>))) Lsum[o]+=Lsum[o<<|];
if(Rsum[o<<|]==(m>>)) Rsum[o]+=Rsum[o<<];
Msum[o]=max(Msum[o],Rsum[o<<]+Lsum[o<<|]);
}
return ;
}
void build(int L,int R,int o) {
if(L==R) {
Lsum[o]=Rsum[o]=Msum[o]=;
Lnum[o]=Rnum[o]=a[L];
return ;
}
int mid=(L+R)>>;
build(L,mid,o<<);
build(mid+,R,o<<|);
push_up(o,R-L+);
}
void Update(int L,int R,int o,int k,int val) {
if(L==R) {
Lnum[o]=Rnum[o]=val;
// Lsum[o]=Rsum[o]=Msum[o]=1;
return ;
}
int mid=(L+R)>>;
if(k<=mid) Update(L,mid,o<<,k,val);
else Update(mid+,R,o<<|,k,val);
push_up(o,R-L+);
}
int Query(int L,int R,int o,int ls,int rs) {
if(ls<=L&&rs>=R) {
return Msum[o];
}
int mid=(L+R)>>;
int ans=;
if(ls<=mid) ans=max(ans,Query(L,mid,o<<,ls,rs));
if(rs>mid) ans=max(ans,Query(mid+,R,o<<|,ls,rs));
if(Rnum[o<<]<Lnum[o<<|])
ans=max(ans,min(mid-ls+,Rsum[o<<])+min(rs-mid,Lsum[o<<|]));
return ans;
}
int main() {
int cas,n,m,ls,rs;
scanf("%d",&cas);
while(cas--) {
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
build(,n,);
for(int i=;i<=m;i++) {
scanf("%s %d %d",Q,&ls,&rs);
if(Q[]=='Q') {
int res=Query(,n,,ls+,rs+);
printf("%d\n",res);
}
else {
Update(,n,,ls+,rs);
}
}
}
return ;
85 }
HDU 3308 (线段树区间合并)的更多相关文章
- hdu 3308(线段树区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 3308 线段树 区间合并+单点更新+区间查询
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 3911 线段树区间合并、异或取反操作
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...
- HDU 3911 线段树区间合并
北京赛区快了,准备袭击数据结构和图论.倒计时 18天,线段树区间合并.维护一个最长连续.. 题意:给一个01串,以下有一些操作,问区间最长的连续的1的个数 思路:非常裸的线段树区间合并 #includ ...
- hdu 1806(线段树区间合并)
Frequent values Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- LCIS HDU - 3308 (线段树区间合并)
LCIS HDU - 3308 Given n integers. You have two operations: U A B: replace the Ath number by B. (inde ...
- HDU 3308 LCIS (经典区间合并)【线段树】
<题目链接> 题目大意: 给你一段序列,对其进行两种操作,一是修改某个序号的点的值:二是查询某个区间的LCIS(最长上升子序列). 解题分析: 线段树区间合并的典型例题,用求某个区间的LC ...
- hdu 3911 Black And White (线段树 区间合并)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3911 题意: 给你一段01序列,有两个操作: 1.区间异或,2.询问区间最长的连续的1得长度 思路: ...
随机推荐
- P3564 [POI2014]BAR-Salad Bar
传送门 我是来帮加藤大佬写题解的--全世界都没找到加藤大佬写法的说明--很难受-- 首先我们把\(p\)看成\(1\),\(j\)看成\(-1\),一个区间满足条件就意味着这个区间的所有前缀和都大于等 ...
- Linux 搭建Discuz论坛
title: Linux 搭建Discuz论坛 Welcome to Fofade's Blog! 这里是Linux 搭建论坛的一些命令记录 命令摘记: 下载文件:Discuz 安装环境:PHP Ap ...
- $CF1153A\ Serval\ and\ Bus$
看大佬的代码都好复杂(不愧是大佬\(orz\) 蒟蒻提供一种思路 因为求的是最近的车对吧\(qwq\) 所以我们可以用一个\(while\)循环所以没必要去用什么 \(for...\) 至于这是\(d ...
- 题解报告:hdu 1035 Robot Motion(简单搜索一遍)
Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...
- 一行python能做什么!
主要收集了平常遇到的代码和网上的简单题目,然后尝试将代码压缩到一行,仅仅是娱乐一下~~~ −−−−−(1)−−−−−−−−−−−(1)−−−−−− 用一行python写出一个嵌套的字符串. def p ...
- kali中的APT软件包处理工具(apt-get)、Debian软件包管理器(dpkg)、源代码压缩和Nessus安装实用指南
写在前面的话 能看懂此博客的朋友,深信你有一定的Kali基础了. 使用APT软件包处理工具(apt-get).Debian软件包管理器(dpkg)来维护.升级和安装自定义及第三方应用程序 APT软件包 ...
- 无法连接到已配置的web服务器
问题:如题,asp.net WebForm的项目,在vs中选择aspx文件在浏览器中查看时候回报该错误. 网上最多的解决方案是防火墙的原因,说关闭防火墙就可以了.但问题是我另一个项目没有问题啊,所以不 ...
- Modbus通讯错误检测方法
标准的Modbus串行网络采用两种错误检测方法.奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息.它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧. 用户 ...
- Explaining difference between automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout
automaticallyAdjustsScrollViewInsets:在导航栏透明时用到 In your viewDidLoad method, add if([self respondsToSe ...
- SQL删除重复数据(根据多个字段),pandas的nan存入数据库报错
delete from M_FACTOR_DATA_TEST a where (a.factor_id,a.data_date,a.stock_code) in (select factor_id,d ...