This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define DEBUG 0
using namespace std;
const int N = 2e5 + 10;
long long S, T;
class A {
public :
long long leftmost, rightmost, windtemp;
A() {}
A(const long long &l, const long long &r, const long long &w) : leftmost(l), rightmost(r), windtemp(w) {}
A operator+(const A &o) const {
long long l, r, w;
l = leftmost;
r = o.rightmost;
w = windtemp + o.windtemp;
if(rightmost < o.leftmost) {
w -= S * (o.leftmost - rightmost);
}
else {
w += T * (rightmost - o.leftmost);
}
return A(l, r, w);
}
};
class SegmentTree {
private :
A tree[4 * N];
long long lazy[4 * N];
public :
void build(const int &idx, const int &l, const int &r) {
if(l == r) {
int a;
cin >> a;
tree[idx] = A(a, a, 0);
return;
}
int mid = (l + r) / 2;
build(idx * 2, l, mid);
build(idx * 2 + 1, mid + 1, r);
tree[idx] = tree[idx * 2] + tree[idx * 2 + 1];
}
void push(const int &idx, const int &l, const int &r) {
if(lazy[idx] == 0) {
return;
}
tree[idx].leftmost += lazy[idx];
tree[idx].rightmost += lazy[idx];
if(l != r) {
lazy[idx * 2] += lazy[idx];
lazy[idx * 2 + 1] += lazy[idx];
}
lazy[idx] = 0;
}
void update(const int &idx, const int &l, const int &r, const int &ql, const int &qr, const int &x) {
push(idx, l, r);
if(r < ql or qr < l) {
return;
}
if(ql <= l and r <= qr) {
lazy[idx] += x;
push(idx, l, r);
return;
}
int mid = (l + r) / 2;
update(idx * 2, l, mid, ql, qr, x);
update(idx * 2 + 1, mid + 1, r, ql, qr, x);
tree[idx] = tree[idx * 2] + tree[idx * 2 + 1];
}
long long get_ans() {
return tree[1].windtemp;
}
}ST;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, q;
cin >> n >> q >> S >> T;
ST.build(1, 0, n);
while(q--) {
int l, r, x;
cin >> l >> r >> x;
ST.update(1, 0, n, l, r, x);
cout << ST.get_ans() << '\n';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |