码迷,mamicode.com
首页 > 其他好文 > 详细

luogu P4513 小白逛公园 2019.8.2

时间:2019-08-02 18:07:20      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:getch   gis   ons   iostream   int   namespace   print   and   单点   

2019.8.2
//by AndyZ #include<cstdio> #include<iostream> #define rint register int #define ls p<<1 #define rs p<<1|1 using namespace std; const int N=5e5+5; int n,m; int a[N]; struct SegmentTree{ int l,r,dat; int lmax,rmax,maxn; }t[N*4]; int read(){ int f=1,x=0;char ch; while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return f*x; } void pushup(int p){ t[p].dat=t[ls].dat+t[rs].dat; t[p].lmax=max(t[ls].dat+t[rs].lmax,t[ls].lmax); t[p].rmax=max(t[rs].dat+t[ls].rmax,t[rs].rmax); t[p].maxn=max(max(t[ls].maxn,t[rs].maxn),t[ls].rmax+t[rs].lmax); } void build(int p,int l,int r){ t[p].l=l,t[p].r=r; if(l==r){t[p].dat=t[p].maxn=t[p].lmax=t[p].rmax=a[l];return ;} int mid=(l+r)/2; build(ls,l,mid); build(rs,mid+1,r); pushup(p); } void add(int p,int x,int k){ if(t[p].l==t[p].r){ t[p].dat=t[p].lmax=t[p].rmax=t[p].maxn=k; return; } int mid=(t[p].l+t[p].r)/2; if(mid>=x){ add(ls,x,k); }else add(rs,x,k); pushup(p); } SegmentTree ask(int p,int l,int r){ if(t[p].l>=l&&t[p].r<=r) return t[p]; int mid=(t[p].l+t[p].r)/2; if(r<=mid) return ask(ls,l,r); else if(l>mid) return ask(rs,l,r); else{ SegmentTree L=ask(ls,l,r),R=ask(rs,l,r),ans; ans.dat = L.dat + R.dat ; ans.lmax = max(L.dat + R.lmax, L.lmax ); ans.rmax = max(R.dat + L.rmax, R.rmax ); ans.maxn = max(max(L.maxn , R.maxn ),L.rmax + R.lmax ); return ans; } } int main(){ n=read(),m=read(); for(rint i=1;i<=n;i++) a[i]=read(); build(1,1,n); for(rint i=1;i<=m;i++){ int opt=read(); if(opt==1){ int a=read(),b=read(); if(a>b) swap(a,b); printf("%d\n",ask(1,a,b).maxn ); }else{ int a=read(),b=read(); add(1,a,b); } } return 0; }

  线段树单点修改 + 区间合并 注意pushup

luogu P4513 小白逛公园 2019.8.2

标签:getch   gis   ons   iostream   int   namespace   print   and   单点   

原文地址:https://www.cnblogs.com/Ryqwe-csy/p/11290236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!