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

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

题目链接

【题意】

给定长度为 nnn 的序列,有2种操作
U A BU \ A \ BU A B 将下标为 AAA 的元素修改为 BBB
Q A BQ \ A \ BQ A B 查询区间 [A,B][A,B][A,B] 的最长连续上升子序列长度(LCIS,不是LIS,必须连续)
下标从0开始 (n,q&lt;=105,元素值&lt;=105)(n,q&lt;=10^5,元素值&lt;=10^5)(n,q<=105<=105)

【思路】

线段树区间合并,区间维护5个属性,sumsumsum 为最长连续上升子序列长度,sumLsumLsumL 为以左端点为起点的最长连续上升子序列长度,sumRsumRsumR 为以右端点为终点的最长连续上升子序列长度,LvLvLv 为左端点值,RvRvRv 为右端点值

#include
#define node tree[id]#define lson tree[id<<1]#define rson tree[id<<1|1]using namespace std;const int maxn=100005;struct Node{ int sum,sumL,sumR; int Lv,Rv; Node(int s=0,int sL=0,int sR=0,int L=0,int R=0):sum(s),sumL(sL),sumR(sR),Lv(L),Rv(R){}};struct Tree{ int left,right; int sum,sumL,sumR; int Lv,Rv;}tree[maxn<<2];int n,q;int a[maxn];void pushup(int id){ node.Lv=lson.Lv; node.Rv=rson.Rv; node.sumL=lson.sumL; node.sumR=rson.sumR; node.sum=max(lson.sum,rson.sum); if(lson.Rv
>1; build(id<<1,le,mid); build(id<<1|1,mid+1,ri); pushup(id);}Node query(int id,int le,int ri){ if(node.left==le && node.right==ri){ return Node(node.sum,node.sumL,node.sumR,node.Lv,node.Rv); } int mid=(node.left+node.right)>>1; if(ri<=mid) return query(id<<1,le,ri); else if(le>mid) return query(id<<1|1,le,ri); else{ Node a=query(id<<1,le,mid); Node b=query(id<<1|1,mid+1,ri); Node ans; ans.Lv=a.Lv; ans.Rv=b.Rv; ans.sumL=a.sumL; ans.sumR=b.sumR; ans.sum=max(a.sum,b.sum); if(a.Rv
>1; if(pos<=mid) update(id<<1,pos,val); else update(id<<1|1,pos,val); pushup(id);}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&q); for(int i=1;i<=n;++i) scanf("%d",&a[i]); build(1,1,n); while(q--){ char op[2]; int x,y; scanf("%s%d%d",op,&x,&y); if(op[0]=='U'){ update(1,x+1,y); } else{ int ans=query(1,x+1,y+1).sum; printf("%d\n",ans); } } } return 0;}

转载于:https://www.cnblogs.com/wafish/p/10465160.html

你可能感兴趣的文章
bWAPP----HTML OS Command Injection - Blind
查看>>
UOJ #10 pyx的难题
查看>>
一.JSP开发的工具下载与环境搭建
查看>>
js模仿块级作用域
查看>>
牛客网——A找一找
查看>>
【Leetcode】24. Swap Nodes in Pairs
查看>>
相亲问题/秘书问题/选股问题/选时问题
查看>>
在java中的Try Catch块-------------异常处理(2)
查看>>
一万小时天才理论
查看>>
javaweb中文乱码问题总结
查看>>
jetty配置远程debug
查看>>
C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程...
查看>>
python虚拟环境
查看>>
oracle时间戳转换
查看>>
计时器
查看>>
压测过程中出现ops断崖式下跌原因及排解
查看>>
Sublime Text 的研究日记
查看>>
IE6不支持透明的PNG图片,有灰白底色
查看>>
BZOJ - 3262 陌上花开
查看>>
codeforces 501C. Misha and Forest
查看>>