全RE 本地停止运行
查看原帖
全RE 本地停止运行
757214
Gohldg楼主2023/8/7 10:36
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
int a[500001];
int b[500001];
int c[500001];
int t[2][500001];
int n,m;
int lowbit(int x){
	return (x&(-x));
}
int add(int x,int y,int k){
	for(int i=x;i<=n;i+=lowbit(i))
        t[k][i]+=y;
}
int sum(int k,int x){
    int num=0;
    for(int i=x;i>=1;i-=lowbit(i))
        num+=t[k][i];
    return num;
}
void upd(int l,int r,int x){
    add(0,l,x);
    add(0,r+1,-x);
    add(1,l,l*x);
    add(1,r+1,-(r+1)*x);
}
int ask(int n){
    int a=sum(0,n);
    int b=sum(1,n);
    return (n+1)*a-b;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
        b[i]=a[i]-a[i-1];
        c[i]=c[i-1]+b[i];
        t[0][i]=c[i]-c[i-lowbit(i)];
	}
	for(int i=1;i<=n;i++){
        c[i]=c[i-1]+i*b[i];
        t[1][i]=c[i]-c[i-lowbit(i)];
    }
	for(int i=1;i<=m;i++){
		int d;
		cin>>d;
		if(d==1){
			int x,y,k;
            cin>>x>>y>>k;
            upd(x,y,k);
		}else{
			int x,y;
            cin>>x>>y;
            cout <<ask(y)-ask(x-1)<<endl;
		}
    }
    return 0;
}
2023/8/7 10:36
加载中...