分块写挂掉了,求调。评测结果中很多结果都是正确的,但是还是0分。服了。
我的代码是:
#include<bits/stdc++.h>
using namespace std;
const long long maxn=5e5+5;
long long a[maxn],s[maxn],n,k;
long long f[maxn];
signed main(){
cin>>n;
k=(long long)(sqrt(n));
for(long long i=0;i<n;i++){
cin>>a[i];
s[i/k]+=a[i];
}
for(long long I=0;I<n;I++){
long long op,l,r,c;
cin>>op>>l>>r>>c;
l--,r--;
if(op==0){
if(l/k==r/k){
for(long long i=l;i<=r;i++){
a[i]+=c;
}
s[l/k]+=(r-l+1)*c;
}
else{
if(l/k==r/k){
for(long long i=l;i<=r;i++){
a[i]+=c;
}
}
else{
for(long long i=l;i<(l/k+1)*k;i++){
a[i]+=c;
}
s[l/k]+=((l/k+1)*k-l)*c;
for(long long i=l/k+1;i<r/k;i++){
s[i]+=k*c;
f[i]+=c;
}
for(long long i=r/k*k;i<=r;i++){
a[i]+=c;
}
s[r/k]+=(r-(r/k*k)+1)*c;
}
}
}
else{
long long ans=0;
if(l/k==r/k){
for(long long i=l;i<=r;i++){
ans+=a[i];
}
}
else{
for(long long i=l;i<(l/k+1)*k;i++){
ans+=(a[i]+f[i/k]);
}
for(long long i=l/k+1;i<r/k;i++){
ans+=s[i];
}
for(long long i=r/k*k;i<=r;i++){
ans+=(a[i]+f[i/k]);
}
}
cout<<ans%(c+1)<<endl;
}
}
return 0;
}
链接在这里:这个
请大佬帮助呜呜呜。