样例过了但是0分 20WA,1TLE 代码如下
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
const int N=2e5+5;
int n,m;
int a[N],bl[N],br[N],bn,sum[N],put[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
bn=sqrt(n);
for(int i=1;i<=n;i++)
{
cin >> a[i];
sum[i/bn+1]+=a[i];
if(i%bn==1)
{
bl[i/bn+1]=i;
}
if(i%bn==0)
{
br[i/bn+1]=i;
}
}
if(bn*bn!=n)
{
br[bn+1]=n;
}
for(int i=1;i<=m;i++)
{
int wh;
cin >> wh;
if(wh==1)
{
int l,r,k;
cin >> l >> r >> k;
int lb=l/bn;
if(l%bn!=0)
{
lb++;
}
int rb=r/bn;
for(int i=l;i<=br[rb-1];i++)
{
a[i]+=k;
}
for(int i=lb;i<=rb;i++)
{
put[i]+=k;
}
for(int i=bl[lb+1];i<=r;i++)
{
a[i]+=k;
}
}
if(wh==2||wh==3)
{
int k;
cin >> k;
if(wh==2)
{
a[1]+=k;
}
else
{
a[1]-=k;
}
}
if(wh==4)
{
int l,r,ans=0;
cin >> l >> r;
int lb=l/bn;
if(l%bn!=0)
{
lb++;
}
int rb=r/bn;
if(r%bn!=0)
for(int i=l;i<=br[rb-1];i++)
{
ans=ans+a[i]+put[lb-1];
}
for(int i=lb;i<=rb;i++)
{
ans=ans+put[i]*bn+sum[i];
}
for(int i=bl[lb+1];i<=r;i++)
{
ans=ans+a[i]+put[rb+1];
}
cout << ans << endl;
}
if(wh==5)
{
cout << a[1]+put[1] << endl;
}
}
return 0;
}