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 ...
随机推荐
- Python 爬虫的工具列表 附Github代码下载链接
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- 关于连接linux被拒
一.scp被拒 在服务器A命令行使用scp往服务器B传输,如: scp -i id_rsa_125 file1 user01@IP:/home #ssh_exchange_identification ...
- 面向对象【day07】:面向对象概念介绍(二)
本节内容 1.概念 2.特性 3.面向对象介绍 一丶概念 1.面向对象编程 OOP(Object-Oriented Programming)编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描 ...
- centos7环境下在线安装mysql
卸载mariadb centos默认安装了mariadb,因此,在安装mysql之前,需要卸载系统中安装的mariadb. 查看系统中所有已安装的mariadb包.命令:rpm -qa | grep ...
- Hbase记录-Hbase介绍
Hbase是什么 HBase是一种构建在HDFS之上的分布式.面向列的存储系统,适用于实时读写.随机访问超大规模数据的集群. HBase的特点 大:一个表可以有上亿行,上百万列. 面向列:面向列表(簇 ...
- C# PointToScreen
子窗体定位时,如果主窗口不在左上角,需要根据主窗口的坐标,相减才行. Point p1 = Label.PointToScreen(new Point(0, 0)); p1.X -= this.X; ...
- ICS Hack Tools
参考链接:http://icstraining.org/en/security-tools/configurations ICS-Security-Tool: https://github.com/I ...
- 【BZOJ】3282: Tree(lct)
http://www.lydsy.com/JudgeOnline/problem.php?id=3282 复习了下lct,发现两个问题.. 1:一开始我以为splay那里直接全部rot(x)就好了,然 ...
- [C++]埃拉托色尼算法
/* 埃拉托色尼算法 问题描述:定义一个正整数n,求0-n范围以内的所有质数 @date 2017-03-06 @author Johnny Zen */ #include<iost ...
- luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control
传送门 要求断掉某些边使得两个点不连通,显然是最小割 但是要求选的边数尽量少,,, 可以考虑修改边权(容量),即把边权\(c\)改成\(c*(m+1)+1\) 没了 // luogu-judger-e ...