区间合并比较模板的题,就是求一个区间的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. javascript 事件冒泡与取消冒泡

    事件冒泡: 当一个元素上的事件被触发时,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先中被触发,这一过程被称为事件冒泡. 这个事件从原始祖先开始,一直冒泡到DOM树的最上层.(bug) ...

  2. HttpTool.java 【暂保留】

    备注 在 java tool util 工具类 中已存在 HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; ...

  3. python -- 算法

    给定四个数字,找出不重复的排列组合可能 # 黑魔法方法,还纳闷 lambda 不能 yield 其实把 [] 改为小括号即是生成器啦 func = lambda num_tuple:((i,j,k,n ...

  4. 18. Spring Boot 、注册Servlet三大组件Servlet、Filter、Listener

    由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件 public class MyServlet extends ...

  5. wireshark数据包分析

    最近有不少同事开始学习Wireshark,他们遇到的第一个困难就是理解不了主界面上的提示信息,于是跑来问我.问的人多了,我也总结成一篇文章,希望对大家有所帮助.Wireshark的提示可是其最有价值之 ...

  6. L1比L2更稀疏

    1. 简单列子: 一个损失函数L与参数x的关系表示为: 则 加上L2正则化,新的损失函数L为:(蓝线) 最优点在黄点处,x的绝对值减少了,但依然非零. 如果加上L1正则化,新的损失函数L为:(粉线) ...

  7. 第18月第25天 github下载单个文件夹 git命令

    1. 用 SVN 即可. 举例说明: 譬如这个项目: Mooophy/Cpp-Primer · GitHub, 我只想看 ch03 文件夹的代码怎么办? 先打开 ch03, 其 URL 为: &quo ...

  8. 基于json文件实现的gearman任务自动重启

    一:在gearman任务失败后,调用task_failed def task_failed(task, *args): info = '\n'.join(args) datetime = local_ ...

  9. Database学习 - mysql 数据库 索引

    索引 索引在mysql 中也叫 '键',是存储引擎用来快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优化 ...

  10. ros navigation stack 各个包的作用

    nav_core 该包定义了整个导航系统关键包的接口函数,包括base_global_planner, base_local_planner以及recovery_behavior的接口.里面的函数全是 ...