玄关马蜂良好可爱小分块
查看原帖
玄关马蜂良好可爱小分块
750476
Hf_Poem楼主2024/10/19 12:12
#include<bits/stdc++.h>
#define setp(a) fixed<<setprecision(a)
#define Venti cout<<"\nVenti!\n";
#define int long long
#define il inline
using namespace std;
const int V=1e5+10,M=500;
int n,m,a[V];
int len,tot,l[M],r[M],sum[M],bel[M],pre[M];

il void init(void){
	len=sqrt(n),tot=(n-1)/len+1;
	for(int i=1;i<=tot;i++)
		l[i]=r[i-1]+1,r[i]=len*i;
	r[tot]=n;
	for(int i=1;i<=tot;i++){
		for(int j=l[i];j<=r[i];j++)
			bel[j]=1,sum[i]+=a[j];
		pre[i]=pre[i-1]+sum[i];
	}
}

il void modify(int k,int x){
	sum[bel[k]]+=x,a[k]+=x;
	for(int i=bel[k];i<=tot;i++)
		pre[i]+=x;
}

il int query(int lx,int rx){
	int ans=0,p=bel[lx],q=bel[rx];
	if(p==q){
		for(int i=lx;i<=rx;i++)
			ans+=a[i];
		return ans;
	}
	ans=pre[q-1]-pre[p];
	for(int i=lx;i<=r[p];i++) ans+=a[i];
	for(int i=l[q];i<=rx;i++) ans+=a[i];
	return ans;
} 

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	init();
	while(m--){
		int op,x,y,k;
		cin>>op;
		if(op==1){
			cin>>x>>k;
			modify(k,x); 
		}
		else{
			cin>>x>>y;
			cout<<query(x,y)<<"\n";
		}
	}
	cout<<endl;
	return 0;
}
/*

*/

看瞎了没看出来哪里出问题了……

2024/10/19 12:12
加载中...