제출 #1081125

#제출 시각아이디문제언어결과실행 시간메모리
1081125TrentFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
121 ms11600 KiB
#include "bits/stdc++.h"
using namespace std;
#define forR(i, x) for(int i=0; i<(x); ++i)
#define REP(i, a, b) for(int i=(a); i<(b); ++i)
#define all(x) x.begin(), x.end()
#define boost() cin.sync_with_stdio(0); cin.tie(0)
typedef long long ll;
typedef vector<int> vi;

const int MN = 2e5 + 10;

ll bit[MN];
void upd(int i, ll by) {
	++i;
	for(; i < MN; i+=i&-i) bit[i] += by;
}
ll qu(int i) {
	++i;
	ll tot = 0;
	for(; i > 0; i-=i&-i) tot += bit[i];
	return tot;
}

signed main() {
	boost();
    int n, q; ll s, t; cin >> n >> q >> s >> t;
    ll tot = 0;
	forR(i, n+1) {
		ll v; cin >> v;
		upd(i, v - (i == 0 ? 0 : qu(i-1)));
	}
	REP(i, 1, n+1) {
		ll ac = qu(i), ap=qu(i-1);
		if(ac > ap) tot -= s * (ac-ap);
		else tot += t * (ap - ac);
	}
	forR(j, q){
		int l, r; ll x; cin >> l >> r >> x;
		if(l > 0){
			ll ac=qu(l), ap=qu(l-1);
			if(ac > ap) tot += s * (ac-ap);
			else tot -= t * (ap - ac);
			ll na = ac + x;
			if(na > ap) tot -= s * (na-ap);
			else tot += t * (ap - na);
		}
		if(r < n){
			ll ac=qu(r+1), ap=qu(r);
			if(ac > ap) tot += s * (ac-ap);
			else tot -= t * (ap-ac);
			ll na = ap + x;
			if(ac > na) tot -= s * (ac-na);
			else tot += t * (na-ac);
		}
		upd(l, x);
		upd(r+1, -x);
		cout << tot << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...