一直找没找出问题,请大佬帮帮忙。 样例过了,调试了很久也没发现问题,到底WA在哪啊,哭。
(大佬们行行好,帮个忙,不行给个数据也好,感谢,感谢,万分感谢)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,len;
int id[200005];
long long sum[200005],num[200005],t[200005];
int read(){
int a=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
a=(a<<1)+(a<<3)+(c-'0');
c=getchar();
}
return f*a;
}
int main(){
n=read(),m=read();
len=sqrt(n);
for(int i=1;i<=n;i++)
id[i]=(i-1)/len+1;
for(int i=1;i<=n;i++)
num[i]=read();
//输入,初始化
while(m--){
int c=read();
if(c==1){
int l=read(),r=read();
long long k=read();
int a=id[l],b=id[r];
if(a==b){
for(int i=l;i<=r;i++){
num[i]+=k;
sum[i]+=k;
}
}
else {
for(int i=l;id[i]==a;i++){
num[i]+=k;
sum[a]+=k;
}
for(int i=a+1;i<b;i++){
sum[i]+=k*len;
t[i]+=k;
}
for(int i=r;id[i]==b;i--){
num[i]+=k;
sum[b]+=k;
}
}
}
else if(c==2){
long long k=read();
num[1]+=k;
sum[id[1]]+=k;
}
else if(c==3){
long long k=read();
num[1]-=k;
sum[id[1]]-=k;
}
else if(c==4){
int l=read(),r=read();
long long ans=0;
int a=id[l],b=id[r];
if(a==b){
for(int i=l;i<=r;i++)
ans+=num[i]+t[id[i]];
}
else {
for(int i=l;id[i]==a;i++)
ans+=num[i]+t[id[i]];
for(int i=a+1;i<b;i++)
ans+=sum[i];
for(int i=r;id[i]==b;i--)
ans+=num[i]+t[id[i]];
}
printf("%lld\n",ans);
}
else printf("%lld\n",num[1]);
}
return 0;
}