92分WA#1#2求条
  • 板块P2357 守墓人
  • 楼主wjr_jok
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/23 16:44
  • 上次更新2024/4/23 17:04:57
查看原帖
92分WA#1#2求条
1236806
wjr_jok楼主2024/4/23 16:44
#include<bits/stdc++.h>
using namespace std;
#define int long long
void write(__int128 n){
    if(n<0){
        putchar('-');
        n*=-1;
    }
    if(n>9) write(n/10);
    putchar(n % 10 + '0');
}
int n,m,s,l,r,k;
__int128 cnt;
int xl[200001],xg[200001],ans[200001];
int x[200001],y[200001],fk[200001];
signed main(){
	cin>>n>>m;
	for(int i=1;i<=(int)sqrt(n);i++){
		cnt++;
		x[cnt]=y[cnt-1]+1;
		y[cnt]=x[cnt]+(int)sqrt(n)-1;
		for(int j=x[cnt];j<=y[cnt];j++){
			fk[j]=cnt;
		}
	}
	if(n%(int)sqrt(n)){
		cnt++;
		x[cnt]=y[cnt-1]+1;
		y[cnt]=n;
		for(int i=x[cnt];i<=y[cnt];i++){
			fk[i]=cnt;
		}
	}
	for(int i=1;i<=n;i++){
		cin>>xl[i];
		ans[fk[i]]+=xl[i];
	}
	for(int i=1;i<=m;i++){
		cin>>s;
		if(s==1){
			cin>>l>>r>>k;
			for(int j=l;j<=min(r,y[fk[l]]);j++){
				xl[j]+=k;
				ans[fk[l]]+=k;
			}
			if(fk[l]!=fk[r]){
				for(int j=x[fk[r]];j<=r;j++){
					xl[j]+=k;
					ans[fk[r]]+=k;
				}
			}
			for(int j=fk[l]+1;j<fk[r];j++){
				xg[j]+=k;
				ans[j]+=k*(y[j]-x[j]+1);
			}
		}
		if(s==2){
			cin>>k;
			xl[1]+=k;
			ans[fk[1]]+=k;
		}
		if(s==3){
			cin>>k;
			xl[1]-=k;
			ans[fk[1]]-=k;
		}
		if(s==4){
			cin>>l>>r;
			cnt=0;
			for(int j=l;j<=min(r,y[fk[l]]);j++){
				cnt+=xl[j]+xg[fk[l]];
			}
			if(fk[l]!=fk[r]){
				for(int j=x[fk[r]];j<=r;j++){
					cnt+=xl[j]+xg[fk[r]];
				}
			}
			for(int j=fk[l]+1;j<fk[r];j++){
				cnt+=ans[j];
			}
			write(cnt);
			cout<<endl;
		}
		if(s==5){
			cout<<xl[1]+xg[fk[1]]<<endl;
		}
	}
	return 0;
}
2024/4/23 16:44
加载中...