#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=4e5+5;
struct node
{
int ans,l,r,len;
int ll,rr;
} tr[maxn<<2];
int n,m,d[maxn];
struct Segtree
{
inline void pushup(node &t,node x,node y)
{
t.ans=max(x.ans,max(y.ans,max(x.r,y.l)));
if(!d[x.rr]||!d[y.ll]||(d[x.rr]<0&&d[y.ll]>0))
{
t.l=x.l,t.r=y.r;
return;
}
t.ans=max(t.ans,x.r+y.l);
if(x.l==x.len)
t.l=x.l+y.l;
else
t.l=x.l;
if(y.r==y.len)
t.r=y.r+x.r;
else
t.r=y.r;
return;
}
inline void build(int l,int r,int t)
{
tr[t].ll=l,tr[t].rr=r;
tr[t].len=r-l+1;
if(l==r)
{
if(d[l])
tr[t].l=tr[t].r=tr[t].ans=1;
else
tr[t].l=tr[t].r=tr[t].ans=0;
return;
}
int mid=l+r>>1;
build(l,mid,t<<1),build(mid+1,r,t<<1|1);
pushup(tr[t],tr[t<<1],tr[t<<1|1]);
return ;
// cout <<l<<" "<<r<<" "<<tr[t].val<<" "<<(tr[t].l?1:0)<<" "<<(tr[t].r?1:0)<<endl;
}
inline void modify(int l,int r,int pos,int val,int t)
{
if(l==r)
{
d[l]+=val;
tr[t].l=tr[t].r=tr[t].ans=0;
if(d[l])
tr[t].l=tr[t].r=tr[t].ans=1;
return ;
}
int mid=l+r>>1;
if(pos<=mid)
modify(l,mid,pos,val,t<<1);
else
modify(mid+1,r,pos,val,t<<1|1);
pushup(tr[t],tr[t<<1],tr[t<<1|1]);
return ;
}
// node query(int l,int r,int x,int y,int t)
// {
// if(x<=l&&r<=y)
// return tr[t];
// int mid=l+r>>1;
// node xx,yy,ans;
// if(x<=mid)
// xx=query(l,mid,x,y,t<<1);
// if(mid<y)
// yy=query(mid+1,r,x,y,t<<1|1);
// //cout <<l<<" "<<mid<<" "<<mid+1<<" "<<r<<endl;
// pushup(ans,xx,yy);
// return ans;
// }
} a;
int xx[maxn];
signed main()
{
cin >>n;
for(int i=1;i<=n;i++)
cin >>xx[i];
for(int i=1;i<n;i++)
d[i]=xx[i+1]-xx[i];
a.build(1,n-1,1);
cin >>m;
while(m--)
{
if(n!=1)
{
int x,y,w;
cin >>x>>y>>w;
if(x!=1)
a.modify(1,n-1,x-1,w,1);
if(y!=n)
a.modify(1,n-1,y,-w,1);
cout <<tr[1].ans+1<<endl;
}
else
cout <<1<<endl;
}
exit(0);
return 0;
}
一份极为正常的代码,为什么会RE?
RE信息:
Runtime Error.
Exit code is 2147483647
Program exited with code 2147483647.
求助各位大佬