Submission #733434

#TimeUsernameProblemLanguageResultExecution timeMemory
733434shoryu386Foehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
651 ms14648 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define N 200010 int fw[N], fw2[N]; void update(int x, int y, int v) { //inclusive x++; y++; for (int tx=x; tx < N; tx += tx&(-tx)) fw[tx] += v, fw2[tx] -= v*(x-1); for (int ty=y+1; ty < N; ty += ty&(-ty)) fw[ty] -= v, fw2[ty] += v*y; } int sum (int x) { x++; int res = 0; for (int tx=x; tx; tx -= tx&(-tx)) res += fw[tx]*x + fw2[tx]; return res; } inline int range_sum(int x, int y) { //inclusive return sum(y)-sum(x-1); } signed main() { int n, q, s, t; cin >> n >> q >> s >> t; int h[n+1]; for (int x = 0; x < n+1; x++) {cin >> h[x]; if (x != 0) update(x, x, h[x]);} int ans = 0; for (int x = 0; x < n; x++){ if (h[x] < h[x+1]) ans -= s * (h[x+1] - h[x]); else ans += t * (h[x] - h[x+1]); } for (int x = 0; x < q; x++){ int a, b, c; cin >> a >> b >> c; //bruh wtf need fenwick, cri //reset to fresh if (range_sum(a-1, a-1) < range_sum(a, a)){ ans += s * (range_sum(a, a) - range_sum(a-1, a-1)); } else{ ans -= t * (range_sum(a-1, a-1) - range_sum(a, a)); } if (b != n && range_sum(b, b) < range_sum(b+1, b+1)){ ans += s * (range_sum(b+1, b+1) - range_sum(b, b)); } else if (b != n){ ans -= t * (range_sum(b, b) - range_sum(b+1, b+1)); } update(a, b, c); if (range_sum(a-1, a-1) < range_sum(a, a)){ ans -= s * (range_sum(a, a) - range_sum(a-1, a-1)); } else{ ans += t * (range_sum(a-1, a-1) - range_sum(a, a)); } if (b != n && range_sum(b, b) < range_sum(b+1, b+1)){ ans -= s * (range_sum(b+1, b+1) - range_sum(b, b)); } else if (b != n){ ans += t * (range_sum(b, b) - range_sum(b+1, b+1)); } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...