HDU 3308 线段树 区间合并模板题
来源:互联网 发布:淘宝店铺改类别 编辑:程序博客网 时间:2024/05/01 02:13
记录左最长 右最长 全局最长即可
模板题
#include "stdio.h"#include "string.h"#include "stdlib.h"#include "math.h"struct comp{int l,r,mid;int l1,r1,m1;} data[300001];int a[300001];int w;int max(int a,int b){if (a<b) return b;else return a;}void Pushup(int k){int ll,rr;ll=data[k*2].r-data[k*2].l+1;rr=data[k*2+1].r-data[k*2+1].l+1;data[k].l1=data[k*2].l1;if (data[k].l1==ll && a[data[k].mid]<a[data[k].mid+1]) data[k].l1+=data[k*2+1].l1;data[k].r1=data[k*2+1].r1;if (data[k].r1==rr && a[data[k].mid]<a[data[k].mid+1]) data[k].r1+=data[k*2].r1;data[k].m1=max(data[k*2].m1,data[k*2+1].m1);if (a[data[k].mid]<a[data[k].mid+1]) data[k].m1=max(data[k].m1,data[k*2].r1+data[k*2+1].l1);}void build(int l,int r,int k){data[k].l=l;data[k].r=r;data[k].mid=(l+r)/2;if (l==r){scanf("%d",&a[w++]);data[k].l1=data[k].r1=data[k].m1=1;return ;}build(l,data[k].mid,k*2);build(data[k].mid+1,r,k*2+1);Pushup(k);}void update(int n,int x,int k){if (data[k].l==data[k].r && data[k].l==n){a[n]=x;return ;}if (n<=data[k].mid) update(n,x,k*2);else update(n,x,k*2+1);Pushup(k);}int query(int l,int r,int k){int ll,rr,aa,bb;if (data[k].l==l && data[k].r==r)return data[k].m1;if (r<=data[k].mid) return query(l,r,k*2);else if (l>data[k].mid) return query(l,r,k*2+1);else {aa=query(l,data[k].mid,k*2);bb=query(data[k].mid+1,r,k*2+1);ll=data[k*2].r1;if (ll>data[k*2].r-l+1) ll=data[k*2].r-l+1;rr=data[k*2+1].l1;if (rr>r-data[k*2+1].l+1) rr=r-data[k*2+1].l+1;if (a[data[k].mid]>=a[data[k].mid+1]) return max(aa,bb);else return max(max(aa,bb),ll+rr);}}int main(){int t,n,m,x,y;char ch[10];scanf("%d",&t);while (t--){scanf("%d%d",&n,&m);w=0;build(0,n-1,1);while (m--){getchar();scanf("%s%d%d",ch,&x,&y);if (ch[0]=='Q') printf("%d\n",query(x,y,1));else update(x,y,1);}}return 0;}
- HDU 3308 线段树 区间合并模板题
- HDU 3308 线段树+区间合并
- hdu 3308 LCIS 线段树 区间合并
- hdu 3308LCIS 线段树 区间合并
- [HDU 3308]LCIS[线段树][区间合并]
- hdu 3308 线段树区间合并
- hdu 3308 线段树区间合并
- hdu 3308 LCIS(线段树区间合并)
- hdu 3308 线段树+区间合并
- hdu 3308 线段树+区间合并
- HDU 3308 线段树区间合并
- hdu 3308 线段树+区间合并
- HDU 3308 LCIS 线段树区间合并
- hdu 3308-线段树基本区间合并
- HDU 3308 线段树之区间合并
- HDU 3308 LCIS(线段树区间合并)
- hdu 3308(线段树区间合并)
- HDU 3308 LCIS 线段树 区间合并 入门题
- (C++实现)——访问者模式(Visitor Pattern)
- java--异常处理
- 将计算机设置为wifi热点
- 受不鸟了,吐槽中国电视剧
- foj 1593 数字接力赛
- HDU 3308 线段树 区间合并模板题
- java--collection容器的使用
- FeatureLayer和FeatureClass
- 使用U盘安装Linux系统经验总结
- [HDU 2896]病毒侵袭[AC自动机]
- jquery第一期:运行第一个jquery
- poj-2057-树形dp
- VS2010中出现无法嵌入互操作类型
- unidac直连oracle导入图片到表中