社区讨论

分块,求助,谢谢您,一定给您关注

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 条回复,欢迎继续交流。

正在加载回复...