题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值

#include <bits/stdc++.h>
#define N 100005
using namespace std;
int lcs[N<<],pre[N<<],suf[N<<],arr[N];维护区间lcs长度,以左端点为起点的lcs长度,以右端点为终点的lcs长度,这么做是为了处理区间合并后区间总lcs值的更新
void pushup(int l,int r,int rt)
{
int m=(l+r)>>;
lcs[rt]=max(lcs[rt<<],lcs[rt<<|]);
if(arr[m]<arr[m+])lcs[rt]=max(lcs[rt],suf[rt<<]+pre[rt<<|]);
pre[rt]=pre[rt<<];
if(pre[rt<<]==m-l+&&arr[m]<arr[m+])pre[rt]+=pre[rt<<|];
suf[rt]=suf[rt<<|];
if(suf[rt<<|]==r-m&&arr[m]<arr[m+])suf[rt]+=suf[rt<<];
}
void build(int l,int r,int rt)
{
if(l==r)
{
suf[rt]=pre[rt]=lcs[rt]=;
return;
}
int m=(l+r)>>;
build(l,m,rt<<);
build(m+,r,rt<<|);
pushup(l,r,rt);
}
void update(int pos,int val,int l,int r,int rt)
{
if(l==r)
{
arr[l]=val;
return;
}
int m=(l+r)>>;
if(pos<=m)update(pos,val,l,m,rt<<);
if(pos>m)update(pos,val,m+,r,rt<<|);
pushup(l,r,rt);
}
int query(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)return lcs[rt];
int m=(l+r)>>;
int mx=;
if(L<=m)mx=max(mx,query(L,R,l,m,rt<<));
if(m<R)mx=max(mx,query(L,R,m+,r,rt<<|));//这时的mx只是各子区间的最大值,必须考虑子区间连接之后的状态
int prex=min(R-m,pre[rt<<|]);
int sufx=min(m-L+,suf[rt<<]);
if(arr[m]<arr[m+])mx=max(mx,prex+sufx);
return mx;
}
int main()
{
int t,n,m;
cin>>t;
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",arr+i);
build(,n,);
char cmd[];
int l,r;
while (m--)
{
scanf("%s%d%d",cmd,&l,&r);
if(cmd[]=='U')update(l+,r,,n,);
else printf("%d\n",query(l+,r+,,n,));
}
}
return ;
}

HDU 3308 线段树求区间最长连续上升子序列长度的更多相关文章

  1. hdu 3308(线段树区间合并)

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. hdu 1754 I Hate It (线段树求区间最值)

    HDU1754 I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u D ...

  3. HDU 3308 线段树 最长连续上升子序列 单点更新 区间查询

    题意: T个测试数据 n个数 q个查询 n个数 ( 下标从0开始) Q u v 查询 [u, v ] 区间最长连续上升子序列 U u v 把u位置改成v #include<iostream> ...

  4. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  5. xdoj-1324 (区间离散化-线段树求区间最值)

    思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...

  6. HDU 1698 <线段树,区间set>

    题目连接 题意: 一条长为N的铜链子,每个结点的价值为1.有两种修改,l,r,z; z=2:表示把[l,r]区间内链子改为银质,价值为2. z=3:表示把[l,r]区间内链子改为金质,价值为3. 思路 ...

  7. hdu 1394 (线段树求逆序数)

    <题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...

  8. 【线段树求区间第一个不大于val的值】Lpl and Energy-saving Lamps

    https://nanti.jisuanke.com/t/30996 线段树维护区间最小值,查询的时候优先向左走,如果左边已经找到了,就不用再往右了. 一个房间装满则把权值标记为INF,模拟一遍,注意 ...

  9. hdu 3308 线段树

    题目大意:给n个数,两种操作1:U  a b   更新第a个为b (从0开始)2: Q    a ,b  查询 a,b之间LCIS(最长连续递增子序列)的长度. Sample Input110 107 ...

随机推荐

  1. Selenium2Library中select frame关键字对没有name和id的frame或者iframe的处理

    elenium2Library中原有的select_frame函数(对应的关键字为select frame)可根据locator选择frame,但是,若某个frame或者iframe没有id,没有na ...

  2. 自旋锁spinlock

    1 在单处理器上的实现 单核系统上,不存在严格的并发,因此对资源的共享主要是多个任务分时运行造成的. 只要在某一时段,停止任务切换,并且关中断(对于用户态应用程序,不大可能与中断处理程序抢临界区资源) ...

  3. 专题:『systemd』

    [COMMAND] Systemd Daemons: systemd networkd journald logind "user session" Systemd units: ...

  4. Vue 学习笔记之 —— 组件(踩了个坑)

    最近在学习vue,学习组件时,遇到了一个问题,困扰了半个多小时.. <!DOCTYPE html> <html lang="en"> <head> ...

  5. 并发编程(六)——进程/线程池、协程、gevent第三方库

    进程/线程池.协程.gevent第三方库 一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上 ...

  6. NIO 源码分析(03) 从 BIO 到 NIO

    目录 一.NIO 三大组件 Channels.Buffers.Selectors 1.1 Channel 和 Buffer 1.2 Selector 1.3 Linux IO 和 NIO 编程的区别 ...

  7. es概念一句话简介和注意点

    1.elasticsearch是什么? 一个实时分布式搜索(全文or结构化)和分析引擎,面向文档(document oriented) 2.主节点(Master Node)职责? 负责集群中的操作(如 ...

  8. scala 实现算法

    快速排序 def sort(xs: Array[Int]): Array[Int] = if (xs.length <= 1) xs else { val pivot = xs(xs.lengt ...

  9. oh my zsh 如何启用插件

    注 根据自己的需求启用插件.但是,插件具体实现什么功能就得自己看啦. 官网说明 实践 其实默认oh my zsh(以下简称zsh)已经在安装的时候就帮我们下载好了所有插件,只不过需要用户自己选择启用哪 ...

  10. box-shadow单侧投影,双侧投影,不规则图案投影

    底部投影box-shadow: 0 5px 4px -4px black; 底部右侧投影 3px 3px 6px -3px black 两侧投影 box-shadow: 7px 0 7px -7px ...