题意:

U A B: 把第A个数变成B
Q A B: 输出【A,B】最长连续上升子序列(注意是连续  相当于子串)

思路:单点更新 ,区间合并几下左边开头最小  和右边结束最大的两个数即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include <iostream>
#define lson (i<<1)
#define rson (i<<1|1)
#define N 100050
using namespace std;
int lsum[N*4],rsum[N*4],msum[N*4];
int lmaxn[N*4],rmaxn[N*4];
int a[N];
int max(int x,int y)
{return x>y?x:y;
}
int min(int x,int y)
{return x<y?x:y;
}
void pushup(int i,int l,int r)
{int mid=(l+r)>>1;lsum[i]=lsum[lson];rsum[i]=rsum[rson];if(lsum[i]==mid-l+1&&rmaxn[lson]<lmaxn[rson])lsum[i]+=lsum[rson];if(rsum[i]==r-mid&&rmaxn[lson]<lmaxn[rson])rsum[i]+=rsum[lson];msum[i]=max(msum[lson],msum[rson]);if(rmaxn[lson]<lmaxn[rson])msum[i]=max(msum[i],rsum[lson]+lsum[rson]);lmaxn[i]=lmaxn[lson];rmaxn[i]=rmaxn[rson];
}
void build(int l,int r,int i)
{if(l==r){lsum[i]=rsum[i]=msum[i]=1;
lmaxn[i]=rmaxn[i]=a[l];return ;}int mid=(l+r)>>1;build(l,mid,lson);build(mid+1,r,rson);pushup(i,l,r);
}
void update(int l,int r,int p,int va,int i)
{if(l==r){lmaxn[i]=rmaxn[i]=va;return ;}int mid=(l+r)>>1;if(p<=mid)update(l,mid,p,va,lson);else update(mid+1,r,p,va,rson);pushup(i,l,r);
}
int query(int l,int r,int pl,int pr,int i)
{if(l>=pl&&r<=pr){return msum[i];}int mid=(l+r)>>1;if(pr<=mid)return query(l,mid,pl,pr,lson);else if(pl>mid)return query(mid+1,r,pl,pr,rson);else{int maxn1=0,maxn2=0;maxn1=query(l,mid,pl,mid,lson);maxn2=query(mid+1,r,mid+1,pr,rson);maxn1=max(maxn1,maxn2);if(rmaxn[lson]<lmaxn[rson]){int tmp=min(rsum[lson],mid-pl+1)+min(lsum[rson],pr-mid);maxn1=max(maxn1,tmp);}return maxn1;}
}
int main() {int tt,n,m;scanf("%d",&tt);while(tt--){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)scanf("%d",&a[i]);build(1,n,1);while(m--){char c;int l,r;scanf(" %c%d%d",&c,&l,&r);if(c=='U'){l++;update(1,n,l,r,1);}else{l++;r++;printf("%d\n",query(1,n,l,r,1));}}}return 0;
}

转载于:https://www.cnblogs.com/L-Ecry/p/3886804.html

HDU 3308 LCIS相关推荐

  1. hdu 3308 LCIS(区间合并)

    hdu 3308 LCIS 因为是求"最长连续上升子序列",所以区间合并和跨区间查询都需要建立在num[t[lch].r]<num[t[rch].l]的基础上 跨区间查询时注 ...

  2. hdu 3308 LCIS 线段树 + 区间合并

    传送门 文章目录 题意: 思路: 题意: 思路: 日常水一篇题解. 带修改的求区间连续的递增序列,我们考虑用线段树维护. 直接维护mlenmlenmlen是区间最长的递增序列,lslsls是从左端点开 ...

  3. hdu.3308 LCIS(线段树,区间合并+单点更新)

    按照傻崽大神的线段树修炼路线,自己做的第二道区间合并的题. 问题比较简单明了,区间求最长连续上升子序列,但是是需要单点更新的 n个数, m组操作 Q A B 询问[A,B]区间的最长连续上升子序列: ...

  4. 【HDU】3308 LCIS

    1 #include<cstdio> 2 #define MAXN 100010 3 struct node 4 { 5 int left,right,val; 6 }; 7 int a[ ...

  5. HDU 3308 线段树求区间最长连续上升子序列长度

    题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...

  6. hdu 3308 线段树

    输入一串数字,有两个操作:Q a b 查询a到b区间内严格递增子串的最大长度 : U a b 把第a位数字替换成b .注意输入的编号是从0开始 解法:线段树维护区间的严格递增子串的最大长度即可.注意细 ...

  7. spark1.0和2.0的区别_Spark2.0 VS Spark 1.* -------SparkSession的区别

    Spark .0以前版本: val sparkConf = new SparkConf().setAppName("soyo") val spark = new SparkCont ...

  8. 线段树开新坑:kuangbin带你飞

    写在最前面的废话 这里I以前的题是暑假刚刚开始的时候在家写的,然后多校一波就荒废了 9月开头回家一波,重新填坑,= =,kuangbin带你飞的pdf,这才一半题,后面还有一波,蓝瘦,慢慢写吧,不写题 ...

  9. 线段树练习——区间合并

    这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并(这里最难理解) hdu 3308 http://acm.hdu.edu.cn/showproblem.p ...

最新文章

  1. Openssl私建CA
  2. FFmpeg-20160422-snapshot-bin
  3. Spring+hibernate里使用jdbc connection
  4. CodeWarrior 初探(1) USBDM 芯片检测
  5. php退出页面父元素,jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码...
  6. 消费金融资金断流,银行抽贷、通道暂停,P2P离场
  7. Mysql 5.7 的‘虚拟列’是做什么?
  8. 马云给雅虎员工作的精彩演讲:爱迪生欺骗了世界!
  9. abrtd:Executable ‘some execution‘ doesn‘t belong to any package and ProcessUnpackaged is set to ‘no‘
  10. SQL Server的代码生成器
  11. Linux系统升级维护费,Antergos Linux 宣布停止维护
  12. 计算机导航医学应用,计算机导航技术在口腔颌面外科应用中的新发展
  13. Css绝对定位position
  14. PHP第一天 ① 重置端口命令 netsh winsock reset
  15. linux udp 套接字编程获取源地址和目的地址(一)
  16. 把单元格一分为二_excel如何把一个单元格分成两个 excel单元格拆分为二行
  17. java实现心型代码
  18. 淮北职业技术学院计算机官网,淮北职业技术学院
  19. VLINK 的更新版本
  20. 从程序员到产品经理再到自己创业的心路历程

热门文章

  1. neo4j 机器学习_neo4j(图数据库)是什么?
  2. rest 接口怎么传list_如何设计一个优雅的RESTFUL的接口
  3. 机器视觉:工业线阵相机与面阵相机特点分析
  4. 【项目实战课】基于Pytorch的DCGAN人脸嘴部表情图像生成实战
  5. 【AI产品】产品小姐姐分析抖音背后的计算机视觉技术
  6. 【AI-1000问】为什么LeNet5倒数第二个全连接层维度为84?
  7. python excel读取出错_python读取excel数据出错
  8. Docker logs 命令
  9. Atitit. . 软件命名空间与类名命名单词的统计程序设计v2
  10. 结对开发4----最大子数组(大数溢出)