题目大意:带区间修改的区间最大连续子段和
题解:科(毒)学(瘤)的分块做法–出题人题解
然而暴力可过……
我的收获:……
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int n,m;
long long a[50005];
int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int main()
{
n=read();m=read();
for(register int i=1;i<=n;i++) a[i]=read();
int l,r,t;long long f,ans;char opt[5];
while(m--){
scanf("%s",opt);
if(opt[0]=='Q'){
l=read();r=read();
f=ans=0;
for(register int i=l;i<=r;i++){
f=f>0?f+a[i]:a[i];
ans=f>ans?f:ans;
}
printf("%lld\n",ans);
}
else{
l=read(),r=read(),t=read();
register int i=l;
while(i+7<=r){
a[i]+=t;a[i+1]+=t;
a[i+2]+=t;a[i+3]+=t;
a[i+4]+=t;a[i+5]+=t;
a[i+6]+=t;a[i+7]+=t;
i+=8;
}
for(register int j=i;j<=r;j++) a[j]+=t;
}
}
}