hdu3308
区间合并比较模板的题,就是求一个区间的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的更多相关文章
- hdu3308 线段树 区间合并
给n个数字 U表示第A个数改为B.A是从0开始. Q输出最大的递增序列个数. 考虑左边,右边,和最大的. #include<stdio.h> #define lson l,m,rt< ...
- hdu3308 线段树——区间合并
更新一个点: 求某个区间的最长连续上升序列: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 #include <cstdio> #in ...
- HDU-3308 LCIS(区间合并)
题目大意:给一个整数序列,m次询问,每次询问某个区间中最长连续上升子序列的长度. 题目分析:线段树区间合并.维护以区间左端开头的.以区间右端点结尾的和区间最长的上升连续序列. 代码如下: # incl ...
- LCIS hdu3308 (线段树 区间合并)
题意: 有两种操作 一种是单点改为b 一种是给出区间ab 区间ab的最大上升子序列个数.. 线段树目前学了三种 第一种单点操作很简单 第二种区域操作加上懒惰标记即可 现在这种 为区间合并. ...
- hdu-3308 LCIS (线段树区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU3308 线段树(区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU3308(LCIS) 线段树好题
题目链接:传送门 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y 2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 题目思路: ...
- HDU3308 线段树区间合并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...
- HDU3308 LCIS
Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Description Given n ...
随机推荐
- String转换为Map
Map<String,Integer> rulsMap = new Gson().fromJson(cachedobj.toString(),new TypeToken<Map< ...
- strace常用参数详解
strace常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. strace命令大家应该比我熟悉吧,如果你不知道,呵呵,会可能跟我一样被人说:“我怀疑你是假运维”,不过没关 ...
- python---redis中文操作与系统中文检测
import redis import chardet r.set("name","我是在Py3保存的中文字符串") ret = r.get("nam ...
- ettercap插件介绍
利用sslstrip和ettercap突破ssl嗅探密码 ettercap之DNS欺骗--结合metasploit使用 ettercap支持在运行时加载模块.它们会自动地编译你的系统是否支持他们或者直 ...
- Java SE之初探反射机制
[Keywords]:Java,Hibernate,虚拟机,框架,SQL [Abstract]: 反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到 ...
- 【BZOJ4826】【HNOI2017】影魔(扫描线,单调栈)
[BZOJ4826][HNOI2017]影魔(扫描线,单调栈) 题面 BZOJ 洛谷 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他 ...
- [CQOI2011]放棋子 (DP,数论)
[CQOI2011]放棋子 \(solution:\) 看到这道题我们首先就应该想到有可能是DP和数论,因为题目已经很有特性了(首先题面是放棋子)(然后这一题方案数很多要取模)(而且这一题的数据范围很 ...
- POJ3233 Matrix Power Series(快速幂求等比矩阵和)
题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...
- aar jar包打包
使用Android Studio Module的方式编译出aar和jar包: aar包:打aar包时,gradle compile依赖编译进来的包不会被打到aar包中,所以接入aar的应用仍然需要添加 ...
- avloadingindicatorview 使用解析
官方文档:https://github.com/81813780/AVLoadingIndicatorView 中文文档:https://www.helplib.com/GitHub/article_ ...