社区讨论
分块最后一个点为什么T了
P2357守墓人参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mdfeu8su
- 此快照首次捕获于
- 2025/07/23 11:34 8 个月前
- 此快照最后确认于
- 2025/07/23 16:17 8 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,f,sum,id[200005];
long long m[200005],g[200005];
int main(){
scanf("%d%d",&n,&f);
sum=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%lld",&m[i]);
id[i]=(i-1)/sum+1;
}
for(int i=1;i<=f;i++){
int x;
scanf("%d",&x);
if(x==1){
int l,r;
long long k;
scanf("%d%d %lld",&l,&r,&k);
int start=id[l],end=id[r];
for(int i=l;i<=min(r,start*sum);i++)m[i]+=k;
if(start!=end)for(int i=end*sum-sum+1;i<=r;i++)m[i]+=k;
for(int i=start+1;i<=end-1;i++)g[i]+=k;
}
else if(x==2){
long long k;
scanf("%lld",&k);
m[1]+=k;
}
else if(x==3){
long long k;
scanf("%lld",&k);
m[1]-=k;
}
else if(x==4){
int l,r;
long long cnt=0;
scanf("%d%d",&l,&r);
for(int j=l;j<=r;j++)cnt+=m[j]+g[id[j]];
printf("%lld\n",cnt);
}
else printf("%lld\n",m[1]);
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...