hdu 3308(单点更新,区间合并)
来源:互联网 发布:苹果8plus网络设置 编辑:程序博客网 时间:2024/05/25 21:36
没什么好说的,赤裸裸的线段树...
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005struct node{int most;int left,right;int lmost,rmost;}seg[N<<2];int n,q;void pushup(int l,int r,int index){int m=(l+r)>>1;node& father=seg[index];node& lson=seg[index<<1];node& rson=seg[index<<1|1];father.left=lson.left;father.right=rson.right;father.lmost=lson.lmost;father.rmost=rson.rmost;father.most=max(lson.most,rson.most);if(lson.right<rson.left){father.most=max(father.most,lson.rmost+rson.lmost);if(lson.lmost==m-l+1)father.lmost+=rson.lmost;if(rson.rmost==r-m)father.rmost+=lson.rmost;}}void build(int l,int r,int index){int m=(l+r)>>1;if(l==r){scanf("%d",&seg[index].left);seg[index].right=seg[index].left;seg[index].most=seg[index].lmost=seg[index].rmost=1;return;}build(lc);build(rc);pushup(l,r,index);}void updata(int id,int num,int l,int r,int index){int m=(l+r)>>1;if(l==r){seg[index].left=seg[index].right=num;return;}if(id<=m)updata(id,num,lc);else updata(id,num,rc);pushup(l,r,index);}int query(int L,int R,int l,int r,int index){int m=(l+r)>>1;if(L==l&&R==r)return seg[index].most;if(R<=m)return query(L,R,lc);else if(L>m)return query(L,R,rc);else{int ret;ret=max(query(L,m,lc),query(m+1,R,rc));if(seg[index<<1].right<seg[index<<1|1].left){ret=max(ret,min(R,m+seg[index<<1|1].lmost)-max(L,m-seg[index<<1].rmost+1)+1);}return ret;}}int main(){int t,a,b;char op[2];scanf("%d",&t);while(t--){scanf("%d%d",&n,&q);build(0,n-1,1);while(q--){scanf("%s%d%d",op,&a,&b);if(op[0]=='U'){updata(a,b,0,n-1,1);}else{printf("%d\n",query(a,b,0,n-1,1));}}}return 0;}
- hdu 3308(单点更新,区间合并)
- hdu 3308 LCIS(单点更新+区间合并)
- hdu 3308 LCIS(单点更新,区间合并)
- hdu 3308 LCIS (线段树+单点更新+区间合并)
- hdu 3308 线段树单点更新 区间合并
- hdu.3308 LCIS(线段树,区间合并+单点更新)
- HDU 3308 LCIS(线段树区间合并 单点更新)
- HDU 3308 LCIS(区间合并 + 单点更新)
- HDU 3308 LCIS 线段树的单点更新,区间合并
- hdu 1540 Tunnel Warfare(单点更新,区间合并)
- HDU 1540 Tunnel Warfare(线段树 区间合并 +单点更新)
- hdu 1540(线段树单点更新 区间合并)
- HDU 1540 Tunnel Warfare(单点更新,区间合并)
- HDU3308区间合并+单点更新
- hdu 3308 LCIS(线段树单点更新+区间合并)中等难度的题目
- HDU 3308 LCIS (线段树·单点更新·区间合并)
- HDU 1540——Tunnel Warfare(线段树,区间合并+单点更新+单点查询)
- [HDU 5316] Magician (线段树+单点更新+区间询问+区间合并)
- 设置系统环境变量立即生效的VBS脚本
- EditPlus快捷键大全
- eclipse+svn+google code
- Visual C#常用函数和方法集汇总(转)
- 搜狐2013实习生(开发类)5.12笔试
- hdu 3308(单点更新,区间合并)
- 二叉树中序线索化算法
- jxls与jxl(未完)
- mysql学习之一
- 算法导论-矩阵链乘法
- BST二叉查找树的实现与操作
- hdu 1018 big number (有个组合公式)
- 集体智慧编程学习之聚类系统
- “图像处理”常用基本线代知识【备忘】