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 ...
随机推荐
- HDU1199 动态线段树 // 离散化
附动态线段树AC代码 http://acm.hdu.edu.cn/showproblem.php?pid=1199 因为昨天做了一道动态线段树的缘故,今天遇到了这题没有限制范围的题就自然而然想到了动态 ...
- 易捷支付完整业务流程的lr脚本编写
业务流程:1.注册2.登录3.重置支付密码4.下订单5.支付订单6.查看订单列表 通用md5.h代码如下: #ifndef MD5_H #define MD5_H #ifdef __alpha typ ...
- Cookie浅谈
相信大家对Cookie多多少少都有点了解吧~~下面我来谈谈吧: 每个Cookie不超过4K数据,每个网站不超过20个Cookie,所有网站的Cookie总和不超过300个 虽然cookie已经是上世纪 ...
- Hadoop生态圈-CentOs7.5单机部署ClickHouse
Hadoop生态圈-CentOs7.5单机部署ClickHouse 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 到了新的公司,认识了新的同事,生产环境也得你去适应新的集群环境,我 ...
- Bash基本功能
bash的基本功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入: 高级运维工程师之路 598432640 一.历史命令和命令补全 1.历 ...
- strace常用参数详解
strace常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. strace命令大家应该比我熟悉吧,如果你不知道,呵呵,会可能跟我一样被人说:“我怀疑你是假运维”,不过没关 ...
- Create ISO library over NFS for XEN server templates
Based on Ubuntu – Server – install NFS on Ubuntu – aptitude -y install nfs-kernel-server create a “ ...
- Python基础【day01】:python介绍发展史(一)
本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- C# 中对于json的解析小结
1.解析之前的json格式 [{ "Name": "冯111", "PID": "130627199202283306" ...
- 使用JS监听键盘按下事件(keydown event)
1.监听全局键盘按下事件,例如监听全局回车事件 1 $(document).keydown(function(event){ 2 if(event.keyCode == 13){ 3 alert('你 ...