博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TJOI2015 旅游
阅读量:6624 次
发布时间:2019-06-25

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

Description

 

Input

Output

 

Sample Input

输入: 3 1 2 3 1 2 2 3 2 1 2 100 1 3 100

Sample Output

输出: 1 1
 

Data Constraint

 

解法:显然的链剖。维护区间max,min,前面减后面的max,后面减前面的max即可

 

#include
#include
#include
#include
#include
using namespace std;struct Tree{ int lr,rl,mx,mn,bz;}tr[400011];Tree Tm[111];int g[50011],next[100011],y[100011],num[50011],dep[50011],fa[50011],top[50011];int id[50011],son[50011],size[50011],pm[111],sm[111],val[50011];int tot,tt,n,i,x,z,q,ans,m;struct AA{ int l,r,k,sh;}que[111];void star(int i,int j){ tt++; next[tt]=g[i]; g[i]=tt; y[tt]=j;}void build_chain(int root){ int x; x=root; while(x){ tot++; id[tot]=x; num[x]=tot; top[x]=root; x=son[x]; }}void dfs(int x){ int j,k; size[x]=1; j=g[x]; while(j!=0){ k=y[j]; if(k!=fa[x]){ fa[k]=x; dep[k]=dep[x]+1; dfs(k); size[x]+=size[k]; if(size[k]>size[son[x]]){ if(son[x])build_chain(son[x]); son[x]=k; } else build_chain(k); } j=next[j]; } }Tree Merge(Tree a,Tree b){ Tree c; c.mx=max(a.mx,b.mx); c.mn=min(a.mn,b.mn); c.rl=max(a.rl,b.rl); c.rl=max(c.rl,b.mx-a.mn); c.lr=max(a.lr,b.lr); c.lr=max(c.lr,a.mx-b.mn); return c;}void up(int t){ Tree a,b; Tree &c=tr[t]; a=tr[t+t];b=tr[t+t+1]; c.mx=max(a.mx,b.mx); c.mn=min(a.mn,b.mn); c.rl=max(a.rl,b.rl); c.rl=max(c.rl,b.mx-a.mn); c.lr=max(a.lr,b.lr); c.lr=max(c.lr,a.mx-b.mn);}void build(int l,int r,int t){ if(l==r){ tr[t].mx=tr[t].mn=val[id[l]]; tr[t].lr=tr[t].rl=0; tr[t].bz=0; return; } int mid; mid=(l+r)/2; build(l,mid,t+t); build(mid+1,r,t+t+1); tr[t].bz=0; up(t);}void change(int t,int x){ tr[t].bz+=x; tr[t].mx+=x; tr[t].mn+=x;}void down(int t,int l,int r){ if(l==r)return; if(tr[t].bz){ change(t+t,tr[t].bz); change(t+t+1,tr[t].bz); tr[t].bz=0; }}void insert(int t,int l,int r,int x,int y,int z){ down(t,l,r); if(l==x&&r==y){ change(t,z); return; } int mid; mid=(l+r)/2; if(y<=mid)insert(t+t,l,mid,x,y,z); if(x>mid)insert(t+t+1,mid+1,r,x,y,z); if(x<=mid&&y>mid){ insert(t+t,l,mid,x,mid,z); insert(t+t+1,mid+1,r,mid+1,y,z); } up(t);}Tree ask(int t,int l,int r,int x,int y){ down(t,l,r); if(l==x&&r==y)return tr[t]; Tree re; int mid; mid=(l+r)/2; if(y<=mid)re=ask(t+t,l,mid,x,y); if(x>mid)re=ask(t+t+1,mid+1,r,x,y); if(x<=mid&&y>mid)re=Merge(ask(t+t,l,mid,x,mid),ask(t+t+1,mid+1,r,mid+1,y)); up(t); return re;}bool cmp(AA a,AA b){ if(a.k==b.k){ if(a.k==1)return a.sh
b.sh; } else return a.k
=1;i--)sm[i]=max(sm[i+1],Tm[i].mx); ans=-214748364; for(i=1;i<=ts;i++){ if(que[i].k==2)ans=max(ans,Tm[i].rl); else ans=max(ans,Tm[i].lr); ans=max(ans,sm[i+1]-pm[i]); }}int main(){ scanf("%d",&n); for(i=1;i<=n;i++)scanf("%d",&val[i]); for(i=1;i

 

转载于:https://www.cnblogs.com/applejxt/p/4475524.html

你可能感兴趣的文章
[俗一下]世界500强公司的面试问题与答案提示 [转]
查看>>
使用 Excel Services ,结合 Analysis Services 在 SharePoint 中发布报表
查看>>
SQL Server数据导入导出技术概述与比较
查看>>
format的用法
查看>>
DHCPv6 server port and DHCPv6 client port
查看>>
10个最佳的触控手式的JavaScript框架(转)
查看>>
BitmapFactory.Options避免 内存溢出 OutOfMemoryError的优化方法
查看>>
Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
查看>>
DNGuard 免费的DotNet加密保护工具 V1.0
查看>>
编程中的命名设计
查看>>
easyui form validate总是返回false原因
查看>>
在(CListView)列表视图中添加右键菜单的方法
查看>>
推荐《HeadFirst设计模式》
查看>>
自定义服务器控件(处理不同的浏览器)
查看>>
解决IE6-IE7下li上下间距
查看>>
配置级别greenplum 可用空间计算
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
消除人声的方法
查看>>
Post请求
查看>>