求助
  • 板块灌水区
  • 楼主Emplace
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/31 12:45
  • 上次更新2023/12/31 16:02:51
查看原帖
求助
745865
Emplace楼主2023/12/31 12:45

玄关一枚

#include<bits/stdc++.h>
using namespace std;
typedef int intt;
#define int long long
long long n,m;
long long a[5000000],b[5000000],c1[5000000],c2[5000000];
long long lb(long long x){
	return x&(-x);
}
long long updata(long long x,long long k){
	for(long long i=x;i<=n;i+=lb(i)){
		c1[i]+=k;
	}
}
int updata1(int x,int k){
	for(int i=x;i<=n;i+=lb(i)){
		c2[i]+=k;
	}
}
int sum(int x){
	int ans=0;
	for(int i=x;i>0;i-=lb(i)){
		ans+=c1[i];
	}
	return ans;
}
int sum1(int x){
	int ans=0;
	for(int i=x;i>0;i-=lb(i)){
		ans+=c2[i];
	}
	return ans;
}
intt main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    	b[i]=a[i]-a[i-1];
    	updata(i,b[i]);
    	updata1(i,i*b[i]);
	}
	for(int i=1;i<=n;i++){
		int t,x,y,k;
		cin>>t>>x>>y;
		if(t==1){
			cin>>k;
			updata(x,k);
			updata(y+1,-k);
			updata1(x,x*k);
			updata1(y+1,-((y+1)*k));
		}
		else{
			cout<<((y+1)*sum(y)-sum1(y))-((x-1+1)*sum((x-1))-sum1((x-1)))<<endl;
		}
	} 
	return 0;
}

p3372

全部RE了

2023/12/31 12:45
加载中...