30分 TLE 求助
查看原帖
30分 TLE 求助
536328
you_flower_me楼主2022/3/24 20:07
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+5;
ll n,m,s,t;
ll c[N],a[N];
ll read(){
	ll a=0,k=1;char c=getchar();
	while (!isdigit(c)){if (c=='-')k=-1;c=getchar();}
	while (isdigit(c)){a=a*10+c-'0';c=getchar();}
	return a*k;
}
inline ll lowbit(int x){return x&-x;}
inline void modify(ll x,ll k){
	for(register ll i=x;i<=n;i+=lowbit(i)) c[i]+=k;
}
inline ll query(ll y){
	ll res=0; 
	for(register ll i=y;i>=1;i-=lowbit(i)) res+=c[i];
	return res;
}
inline ll find(){
	ll b=0;
	for(register ll i=0;i<n;++i){
		int j=i+1;
		int x=query(i)+a[i],y=query(j)+a[j];
		if(x<y){
			b-=s*abs(x-y);
		}
		if(x>y){
			b+=t*abs(x-y);
		}
	}
	return b;
}
int main(){
	n=read(),m=read(),s=read(),t=read();
	for(register ll i=0;i<=n;++i){
		a[i]=read();
	}
	while(m--){
		int x=read(),y=read(),z=read();
		if(x>y) swap(x,y);
		modify(x,z),modify(y+1,-z);
		cout<<find()<<endl;
	}
	return 0;
}
2022/3/24 20:07
加载中...