博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(简单) HDU 3308 LCIS,线段树+区间合并。
阅读量:5137 次
发布时间:2019-06-13

本文共 1444 字,大约阅读时间需要 4 分钟。

  Problem Description

  Given n integers.

  You have two operations:
  U A B: replace the Ath number by B. (index counting from 0)
  Q A B: output the length of the longest consecutive increasing subsequence (LCIS) in [a, b].

 

  题目大意就是给你一个数列,求区间内的最长连续子序列。以及对某一个点的值进行更改。

  线段树维护区间内的LCIS,前缀LCIS,后缀LCIS就可。

 

代码如下:

#include
#include
#include
#define lson L,M,po*2#define rson M+1,R,po*2+1#define lc po*2#define rc po*2+1using namespace std;const int maxn=10e5+10;int mBIT[maxn*4],lBIT[maxn*4],rBIT[maxn*4];int num[maxn];void pushUP(int po,int len,int M){ mBIT[po]=max(mBIT[lc],mBIT[rc]); lBIT[po]=lBIT[lc]; rBIT[po]=rBIT[rc]; if(num[M]
=R) return mBIT[po]; int M=(L+R)/2; if(qr<=M) return query(ql,qr,lson); if(ql>M) return query(ql,qr,rson); int ans=max(query(max(ql,L),M,lson),query(M+1,min(qr,R),rson)); int temp=min(rBIT[lc],M-ql+1)+min(lBIT[rc],qr-M); if(num[M]
>T; while(T--) { scanf("%d %d",&N,&M); build_tree(0,N-1,1); while(M--) { scanf("%s %d %d",c,&a,&b); if(c[0]=='Q') printf("%d\n",query(a,b,0,N-1,1)); else { num[a]=b; update(a,0,N-1,1); } } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/whywhy/p/4209704.html

你可能感兴趣的文章
post参数的方法 json data 和特别的传参
查看>>
3.1本地数据获取
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第5节 final关键字_2_final关键字用于修饰类...
查看>>
lockback 生成json 日志配置
查看>>
【甲午年正月初九】测试的需求文档评审
查看>>
ASP导出数据到excel遇到的一些问题
查看>>
pdf文件之itextpdf插入html内容以及中文解决方案
查看>>
恭送功臣
查看>>
CSS清除浮动
查看>>
犯罪都市
查看>>
Android ViewPager再探:增加滑动指示条
查看>>
angualr路由守卫
查看>>
分布式锁-多种实现方式
查看>>
delphi 安卓配置教程
查看>>
Spring基础
查看>>
DBDocumentGenerator使用
查看>>
调用支付jsapi缺少参数appid
查看>>
Thunder团队第五周 - Scrum会议7
查看>>
查询左表存在而右表不存在的记录
查看>>
JAVA_DES 加密 解密 生成随机密钥
查看>>