萌新刚学OI求C++小游戏玄关
  • 板块灌水区
  • 楼主__Q_w_Q__
  • 当前回复14
  • 已保存回复14
  • 发布时间2024/8/2 12:27
  • 上次更新2024/8/2 14:01:10
查看原帖
萌新刚学OI求C++小游戏玄关
933380
__Q_w_Q__楼主2024/8/2 12:27

好吧其实主要部分实在标题的前6个字 C艹小游戏及病毒代码就不用发了谢谢

玄关

一道可爱的红题

一只彩笔的提交记录

#include<bits/stdc++.h>
#define maxn 100010
using namespace std;
int n,m;
int block;
long long lazy[maxn];
long long a[maxn],b[maxn],id[maxn];
void add(int l,int r,int c){
	int sid=id[l],eid=id[r];
	if(sid==eid){
		for(int i=l;i<=r;i++){
			a[i]+=c;
			b[sid]+=c;
		}
		return ;
	}
	for(int i=l;id[i]==sid;i++){
		a[i]+=c;
		b[sid]+=c;
	}
	for(int i=sid+1;i<=eid-1;i++){
		lazy[i]+=c;
		b[sid]+=block*c;
	}
	for(int i=r;id[i]==eid;i--){
		a[i]+=c;
		b[eid]+=c;
	}
	return ; 
}
int query(int l,int r){
	int res=0;
	int sid=id[l],eid=id[r];
	if(sid==eid){
		for(int i=l;i<=r;i++){
			res+=a[i];
			res+=lazy[sid];
		}
		return res;
	}
	for(int i=l;id[i]==sid;i++){
		res+=a[i];
		res+=lazy[sid];
	}
	for(int i=sid+1;i<=eid-1;i++){
		res+=b[i];
	}
	for(int i=r;id[i]==eid;i--){
		res+=a[i];
		res+=lazy[eid];
	}
	return res;
}
signed main(){
	std::ios::sync_with_stdio(false);
	cin>>n>>m;
	block=sqrt(n);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		id[i]=(i-1)/block+1;
		b[id[i]]+=a[i];
	}
	for(int i=1;i<=m;i++){
		int op,x,y,z;
		cin>>op>>x>>y;
		if(op==1){
			cin>>z;
			add(x,y,z);
		}
		else{
			cout<<query(x,y)<<'\n';
		}
	}
	return 0;
}
2024/8/2 12:27
加载中...