HDU 3308 LCIS 线段树 PushUp应用
来源:互联网 发布:房产营销软件下载 编辑:程序博客网 时间:2024/06/11 03:49
http://acm.hdu.edu.cn/showproblem.php?pid=3308#include<bits/stdc++.h>using namespace std;const int MAX=100005;int N,M,A[MAX];struct Node{ int l,r,c; //l,r - 左右边界 c - 长度 int ln,rn; //ln,rn - 左右边界的值 int ls,rs,ms; //ls,rs - 左右区间的最大LCIS ms - 该区间最大LCIS};Node F[MAX*4];void PushUp(int x){ F[x].ls=F[x*2].ls; F[x].rs=F[x*2+1].rs; F[x].ln=F[x*2].ln; F[x].rn=F[x*2+1].rn; F[x].ms=max(F[x*2].ms,F[x*2+1].ms); if (F[x*2].rn<F[x*2+1].ln) { if (F[x*2].ls==F[x*2].c) F[x].ls+=F[x*2+1].ls; if (F[x*2+1].rs==F[x*2+1].c) F[x].rs+=F[x*2].rs; F[x].ms=max(F[x].ms,F[x*2].rs+F[x*2+1].ls); }}void Build(int x,int l,int r){ F[x].l=l,F[x].r=r,F[x].c=r-l+1; if (l==r) { F[x].ln=F[x].rn=A[l]; F[x].ls=F[x].rs=F[x].ms=1; return; } int mid=(F[x].l+F[x].r)/2; Build(x*2,l,mid); Build(x*2+1,mid+1,r); PushUp(x);}void Insert(int x,int a,int b){ if (F[x].l==F[x].r) { F[x].ln=F[x].rn=b; return; } int mid=(F[x].l+F[x].r)/2; if (a<=mid) Insert(x*2,a,b); if (a>mid) Insert(x*2+1,a,b); PushUp(x);}int Query(int x,int l,int r){ if (l<=F[x].l&&F[x].r<=r) return F[x].ms; int mid=(F[x].l+F[x].r)/2; int Ans=0; if (l<=mid) Ans=max(Ans,Query(x*2,l,r)); if (r>mid) Ans=max(Ans,Query(x*2+1,l,r)); if (F[x*2].rn<F[x*2+1].ln) Ans=max(Ans,min(mid-l+1,F[x*2].rs)+min(r-mid,F[x*2+1].ls)); return Ans;}int main(){ int T,a,b; char Str[10]; scanf("%d",&T); while (T--) { scanf("%d%d",&N,&M); for (int i=1;i<=N;i++) scanf("%d",&A[i]); Build(1,1,N); while (M--) { scanf("%s%d%d",Str,&a,&b); if (Str[0]=='Q') printf("%d\n",Query(1,a+1,b+1)); else Insert(1,a+1,b); } } return 0;}
0 0
- HDU 3308 LCIS 线段树 PushUp应用
- hdu 3308 LCIS (线段树)
- 线段树 HDU 3308 LCIS
- HDU 3308 LCIS (线段树)
- hdu-3308-LCIS 线段树
- HDU 3308 LCIS 线段树
- 【线段树】HDU 3308 LCIS
- hdu 3308 LCIS(线段树)
- HDU - 3308 LCIS(线段树)
- HDU 3308 LCIS 线段树
- HDU 3308 LCIS(线段树)
- hdu 3308 LCIS(线段树)
- 【线段树求LCIS】HDU 3308
- hdu 3308 LCIS 线段树 区间合并
- hdu 3308 线段树区间 LCIS
- hdu 3308 LCIS (线段树)
- hdu 3308LCIS 线段树 区间合并
- [HDU 3308]LCIS[线段树][区间合并]
- Java创建多线程的三种方式
- 1201-1300
- HDU 3487 Play With Chain Splay树 区间处理
- 小伙的java之旅(2)
- 1301-1400
- HDU 3308 LCIS 线段树 PushUp应用
- Base64 编码换行和+号遍空格的处理
- PHP Warning: date(): It is not safe to rely on the system’s timezone settings
- 1401-1500
- TCP、UDP数据包大小的限制
- 51NOD 1632 B君的连通 期望计算 推公式 打表
- DOS命令总结
- POJ 3468 A Simple Problem with Integers 线段树区间更新
- 1501-1600