제출 #140524

#제출 시각아이디문제언어결과실행 시간메모리
140524meatrowFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
486 ms15868 KiB
//#pragma GCC optimize("O3") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native") //#pragma GCC optimize ("unroll-loops") #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int N = 2e5; ll t[N * 4]; ll a[N]; void build(ll a[], int v, int tl, int tr) { if (tl == tr) { t[v] = a[tl]; } else { int tm = (tl + tr) / 2; build(a, v*2, tl, tm); build(a, v*2+1, tm+1, tr); t[v] = 0; } } void update(int v, int tl, int tr, int l, int r, int add) { if (l > r) return; if (l == tl && r == tr) { t[v] += add; } else { int tm = (tl + tr) / 2; update(v*2, tl, tm, l, min(r, tm), add); update(v*2+1, tm+1, tr, max(l, tm+1), r, add); } } ll get(int v, int tl, int tr, int pos) { if (tl == tr) return t[v]; int tm = (tl + tr) / 2; if (pos <= tm) return t[v] + get(v*2, tl, tm, pos); else return t[v] + get(v*2+1, tm+1, tr, pos); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, q, s, t; cin >> n >> q >> s >> t; n++; ll down = 0; for (int i = 0; i < n; i++) { cin >> a[i]; if (i) { if (a[i] < a[i - 1]) { down -= a[i] - a[i - 1]; } } } build(a, 1, 0, n - 1); while (q--) { int l, r, x; cin >> l >> r >> x; ll a1 = get(1, 0, n - 1, l - 1); ll b1 = get(1, 0, n - 1, l); ll a2 = get(1, 0, n - 1, r); ll b2 = get(1, 0, n - 1, r + 1); if (b1 < a1) { down += b1 - a1; } if (r + 1 < n && b2 < a2) { down += b2 - a2; } update(1, 0, n - 1, l, r, x); a1 = get(1, 0, n - 1, l - 1); b1 = get(1, 0, n - 1, l); a2 = get(1, 0, n - 1, r); b2 = get(1, 0, n - 1, r + 1); if (b1 < a1) { down -= b1 - a1; } if (r + 1 < n && b2 < a2) { down -= b2 - a2; } cout << t * down - s * (get(1, 0, n - 1, n - 1) + down) << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...