分块板子求调
  • 板块学术版
  • 楼主ifffer_2137
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/7 14:41
  • 上次更新2023/11/3 05:24:51
查看原帖
分块板子求调
677440
ifffer_2137楼主2023/8/7 14:41
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define int long long
#define inf 0x7fffffff
int n,k,op,l,r,c;
int a[50005],id[50005],tag[305];
signed main(){
	cin.tie(0),cout.tie(0);
	cin>>n;
	k=sqrt(n);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		id[i]=(i-1)/k+1;
	}
	for(int i=1;i<=n;i++){
		cin>>op>>l>>r>>c;
		if(op==0){
			for(int j=(l%k==1?id[l]:id[l]+1);j<=(r%k==0?id[r]:id[r]-1);j++){
				tag[j]+=c;
			}
			if(l%k!=1){
				for(int j=l;j<=id[l]*k;j++){
					a[j]+=c;
				}
			}
			if(r%k!=0){
				for(int j=(id[r]-1)*k+1;j<=r;j++){
					a[j]+=c;
				}
			}
		}else{
			cout<<a[r]+tag[id[r]]<<endl;
		}
	}
	return 0;
}
2023/8/7 14:41
加载中...