HDU 3308
来源:互联网 发布:winscp网络错误被拒绝 编辑:程序博客网 时间:2024/05/19 22:58
线段树 区间合并
题意:
U A B 把A点的值改为B
Q A B 求区间[A,B]的最长连续递增子序列
分析:
pushup 的时候 ,如果左区间的右值小于右区间的左值,则左右区间可以合并,否则,LCS为左右区间中最长的。
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ls rt<<1#define rs rt<<1|1#define N 100005using namespace std;int lv[N<<2]; //区间左端点值int rv[N<<2]; //区间右端点值int lcs[N<<2]; //区间最长连续递增子序列int llcs[N<<2]; //区间左最长连续递增子序列int rlcs[N<<2]; //区间右最长连续递增子序列int len[N<<2]; //区间长度void pushup(int rt){ lv[rt]=lv[ls]; rv[rt]=rv[rs]; llcs[rt]=llcs[ls]; rlcs[rt]=rlcs[rs]; lcs[rt]=max(lcs[ls],lcs[rs]); if(rv[ls]<lv[rs]){ if(llcs[ls]==len[ls]) //左孩子区间左LCS=区间长度 llcs[rt]+=llcs[rs]; if(rlcs[rs]==len[rs])//右孩子区间右LCS=区间长度 rlcs[rt]+=rlcs[ls]; lcs[rt]=max(lcs[rt],rlcs[ls]+llcs[rs]); }}void build(int l, int r,int rt){ len[rt]=r-l+1; if(l==r){ scanf("%d",&lv[rt]); rv[rt]=lv[rt]; lcs[rt]=1; llcs[rt]=1; rlcs[rt]=1; return ; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt);}void update(int x,int y,int l,int r,int rt){ if(l==r){ lv[rt]=rv[rt]=y; return; } int m=(l+r)>>1; if(x<=m) update(x,y,lson); else update(x,y,rson); pushup(rt);}int query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R){ return lcs[rt]; } int m=(l+r)>>1; int ret=0; if(L<=m){ ret=max(ret,query(L,R,lson)); } if(R>m){ ret=max(ret,query(L,R,rson)); } if(rv[ls]<lv[rs]){ ret=max(ret,min(m-L+1,rlcs[ls])+min(R-m,llcs[rs])); } return ret;}int main(){ int T,Q,x,y,n; char op[2]; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&Q); build(1,n,1); while(Q--){ scanf("%s",op); scanf("%d%d",&x,&y); if(op[0]=='Q'){ printf("%d\n",query(x+1,y+1,1,n,1)); }else { update(x+1,y,1,n,1); } } } return 0;}
0 0
- hdu 3308
- hdu 3308
- hdu 3308
- HDU 3308
- hdu 3308
- 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
- HDU-3308-LCIS
- HDU 3308 LCIS
- 甘睿星心得5
- linux apr安装
- android视图继承关系
- mfc欢迎页
- Letter Combinations of a Phone Number
- HDU 3308
- 全站GZIP压缩过滤器
- Java POI读取Office excel (2003,2007)及相关jar包
- Setting up a CloudStack dev environment on Windows
- Oracle SQL优化必要的全表扫描思路分析
- ctags为系统头文件目录生成tags
- Leetcode-Convert Sorted List to Binary Search Tree
- 基于有限自动机的KMP算法构造思想
- 氖憾费纤叵蜕庇弛椅醚叵沉沟饶必