社区讨论
分块,求助,谢谢您,一定给您关注
P2357守墓人参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo9inule
- 此快照首次捕获于
- 2023/10/28 12:02 2 年前
- 此快照最后确认于
- 2023/10/28 12:02 2 年前
CPP
#include<iostream>
#include<cstdio>
using namespace std;
struct node{
int shu,zushu;
};
node a[100005];
long long zujia[50005],zujds[50005];//5个一组
int n,m,giao;
int pd;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].shu;
if(i%5==0){
giao=i/5;
}else{
giao=i/5+1;
}
a[i].zushu=giao;
zujia[giao]+=a[i].shu;
}
for(int i=1;i<=m;i++){
cin>>pd;
if(pd==1){
int tou,wei,jiashu,a1,b1;
cin>>tou>>wei>>jiashu;
if(tou%5==1){
a1=a[tou].zushu;
}else{
int a2,b2;
a2=tou;
b2=a[tou].zushu*5;
a1=a[tou].zushu+1;
for(int j=a2;j<=b2;j++){
a[j].shu+=jiashu;
zujia[a[j].zushu]+=jiashu;
}
}
if(wei%5==0){
b1=a[wei].zushu;
}else{
int a2,b2;
a2=(a[wei].zushu*5)-4;
b2=wei;
b1=a[wei].zushu-1;
for(int j=a2;j<=b2;j++){
a[j].shu+=jiashu;
zujia[a[j].zushu]+=jiashu;
}
}
for(int j=a1;j<=b1;j++){
zujds[j]+=jiashu;
zujia[j]+=jiashu*5;
}
}else if(pd==2){
int jiashu;
cin>>jiashu;
a[1].shu+=jiashu;
zujia[1]+=jiashu;
}else if(pd==3){
int jianshu;
cin>>jianshu;
a[1].shu-=jianshu;
zujia[1]-=jianshu;
}else if(pd==4){
int tou,wei,a1,b1;
long long sum=0;
cin>>tou>>wei;
if(tou%5==1){
a1=a[tou].zushu;
}else{
int a2,b2;
a2=tou;
b2=a[tou].zushu*5;
a1=a[tou].zushu+1;
for(int j=a2;j<=b2;j++){
sum+=a[j].shu;
sum+=zujds[a[j].zushu];
}
}
if(wei%5==0){
b1=a[wei].zushu;
}else{
int a2,b2;
a2=(a[wei].zushu*5)-4;
b2=wei;
b1=a[wei].zushu-1;
for(int j=a2;j<=b2;j++){
sum+=a[j].shu;
sum+=zujds[a[j].zushu];
}
}
for(int j=a1;j<=b1;j++){
sum+=zujia[j];
}
cout<<sum<<endl;
}else{
cout<<a[1].shu+zujds[1]<<endl;
}
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...