为什么会错#19
查看原帖
为什么会错#19
773805
wsm52楼主2025/7/28 17:22
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long LL;
const int N=1e5+10;
int n,m,a[N];
LL tree1[N],tree2[N];
int lowbit(int x){
	return x&-x;
}
void insert(LL tree[],int x,LL k){
	while(x<=n){
		tree[x]+=k;
		x+=lowbit(x);
	}
}
LL query(LL tree[],int x){
	LL sum=0;
	while(x){
		sum+=tree[x];
		x-=lowbit(x);
	}
	return sum;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		insert(tree1,i,a[i]-a[i-1]);
		insert(tree2,i,(i-1)*(a[i]-a[i-1]));
	}
	int op,x,y;
	LL k;
	while(m--){
		scanf("%d%d%d",&op,&x,&y);
		if(op==1){
			scanf("%llu",&k);
			insert(tree1,x,k);
			insert(tree1,y+1,-k);
			insert(tree2,x,(x-1)*k);
			insert(tree2,y+1,-y*k);
		}else printf("%llu\n",y*query(tree1,y)-query(tree2,y)-(x-1)*query(tree1,x-1)+query(tree2,x-1));
	}
	return 0;
}
2025/7/28 17:22
加载中...