区间合并比较模板的题,就是求一个区间的LCIS

线段树维护左最大LCIS,右最大LCIS,区间LCIS

看代码就行

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100005
int lval[maxn<<],rval[maxn<<];//Çø¼ä×óÓҶ˵ãÖµ
int lmx[maxn<<],rmx[maxn<<],mx[maxn<<];//Çø¼ä×ó²àLCIS£¬Çø¼äÓÒ²àLCIS£¬Çø¼äLCIS
inline void pushup(int rt,int l,int r){
lval[rt]=lval[rt<<];rval[rt]=rval[rt<<|];//¸üÐÂ×óÓҶ˵ã
//¸üÐÂ×óÓÒLCISºÍLCIS
lmx[rt]=lmx[rt<<];//×ó¶Ë
rmx[rt]=rmx[rt<<|];//ÓÒ¶Ë
mx[rt]=max(mx[rt<<],mx[rt<<|]); int m=l+r>>;
int lenl=m-l+,lenr=r-m;//×óÓÒ×ÓÇø¼ä³¤¶È
if(rval[rt<<]<lval[rt<<|]){//ºÏ²¢ if(lmx[rt<<]==lenl)
lmx[rt]+=lmx[rt<<|];
if(rmx[rt<<|]==lenr)
rmx[rt]+=rmx[rt<<];
mx[rt]=max(mx[rt],rmx[rt<<]+lmx[rt<<|]);
}
mx[rt]=max(mx[rt],max(lmx[rt],rmx[rt]));
}
void build(int l,int r,int rt){
if(l==r){
scanf("%d",&lval[rt]);
rval[rt]=lval[rt];
lmx[rt]=rmx[rt]=mx[rt]=;
return;
}
int m=l+r>>;
build(lson);
build(rson);
pushup(rt,l,r);
}
void update(int pos,int c,int l,int r,int rt){
if(l==r){
lval[rt]=rval[rt]=c;
return;
}
int m=l+r>>;
if(pos<=m) update(pos,c,lson);
else if(pos>m) update(pos,c,rson);
pushup(rt,l,r);
}
int query(int L,int R,int l,int r,int rt){
if(L<=l && R>=r){
return mx[rt];
}
int m=l+r>>;
if(R<=m) return query(L,R,lson);//Èç¹û[L,R]ÔÚ×óÇø¼ä
else if(L>m) return query(L,R,rson);
else {//µ½Á½¸öÇø¼äÀï²éÕÒ
int temp1=query(L,R,lson);
int temp2=query(L,R,rson);
int temp3=;
if(rval[rt<<]<lval[rt<<|]){
temp3+=min(m-L+,rmx[rt<<]);
temp3+=min(R-m,lmx[rt<<|]);
}
/*return max(temp3,max(temp1,temp2));*///¶ÔÓÚÁ½¸ö×ÓÇø¼ä£¬Ö»ÓÐÈýÖÖÇé¿ö×÷Ϊ×îÖÕ½á¹û£¬Ò»ÊÇ×óÇø¼äµÄLCIS£¬¶þÊÇÓÒÇø¼äµÄLCIS£¬ÈýÊǺϲ¢ºóÖмäµÄÄÇÒ»¶Î
return max(max(temp1,temp2),temp3);
}
} int main(){
int T,n,q;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&q);
build(,n-,); int a,b;
char op[];
while(q--){
scanf("%s%d%d",op,&a,&b);
if(op[]=='Q') printf("%d\n",query(a,b,,n-,));
else update(a,b,,n-,);
}
}
return ;
}

hdu3308的更多相关文章

  1. hdu3308 线段树 区间合并

    给n个数字 U表示第A个数改为B.A是从0开始. Q输出最大的递增序列个数. 考虑左边,右边,和最大的. #include<stdio.h> #define lson l,m,rt< ...

  2. hdu3308 线段树——区间合并

    更新一个点: 求某个区间的最长连续上升序列: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 #include <cstdio> #in ...

  3. HDU-3308 LCIS(区间合并)

    题目大意:给一个整数序列,m次询问,每次询问某个区间中最长连续上升子序列的长度. 题目分析:线段树区间合并.维护以区间左端开头的.以区间右端点结尾的和区间最长的上升连续序列. 代码如下: # incl ...

  4. LCIS hdu3308 (线段树 区间合并)

    题意: 有两种操作  一种是单点改为b  一种是给出区间ab  区间ab的最大上升子序列个数.. 线段树目前学了三种  第一种单点操作很简单   第二种区域操作加上懒惰标记即可 现在这种 为区间合并. ...

  5. hdu-3308 LCIS (线段树区间合并)

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

  6. HDU3308 线段树(区间合并)

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

  7. HDU3308(LCIS) 线段树好题

    题目链接:传送门 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y   2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 题目思路: ...

  8. HDU3308 线段树区间合并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...

  9. HDU3308 LCIS

    Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Description Given n ...

随机推荐

  1. Angular开发小笔记

    一.父组件怎么覆盖子组件的样式呢 1./deep/(不建议这么做,以后angular会取消,因为这样写不利于组件的独立性) 在父组件的scss里面写: :host{ 子组件名 /deep/ label ...

  2. sns.pairplot

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  3. JavaEE学习总结(十四)— 人工智能微博

    一.数据库与表 人工智能微博(blog) note(id,bt,nr);微博信息(编号,标题,内容) 列表添加 数据库脚本 /* Navicat MySQL Data Transfer Source ...

  4. Java中Dom解析XML

    DOM将整个XML文件加载到内存中,并构建出节点树:应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点.属性等信息:这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存 ...

  5. 解决win10无线无故断网,重启才恢复正常的情况【原】

    最初以为是路由器问题 ,但是别人电脑都好好的呀,而且我自己的手机也是好好的能正常上网,所以只能从自身电脑找问题了,目测就是无线网卡出问题了.经过一番百度,原来是win10自动开启了省模式,运行一段时间 ...

  6. C# 实现Bezier曲线(vs2008)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. Hibernate非主键一对多关联。

    Unit表 id,code User表 id,ucode ...@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ucode" ...

  8. 5W2H分析法

  9. 第16月第5天 performSelector afterDelay cancel dispatch_semaphore_wait

    1. //不延时,可能会导致界面黑屏并卡住一会 [self performSelector:@selector(startScan) withObject:nil afterDelay:0.3]; - ...

  10. python cookbook 笔记二

    去重和排序: #coding=utf-8 def dedupe(items): seen = set() for item in items: if item not in seen: yield i ...