Submission #761779

#TimeUsernameProblemLanguageResultExecution timeMemory
761779KN200711Foehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
250 ms15664 KiB
# include <bits/stdc++.h> # define ll long long using namespace std; ll A[200001]; ll ans; ll seg[800010]; void build(int lf, int rg, int nd) { if(lf == rg) seg[nd] = A[lf]; else { seg[nd] = 0ll; int mid = (lf + rg)/2; build(lf, mid, 2*nd+1); build(mid+1, rg, 2*nd+2); } } void upd(int lf, int rg, int nd, int clf, int crg, ll ad) { if(clf > rg || crg < lf) return; if(clf <= lf && rg <= crg) seg[nd] += ad; else { int mid = (lf + rg)/2; upd(lf, mid, 2*nd+1, clf, crg, ad); upd(mid+1, rg, 2*nd+2, clf, crg, ad); } } ll qry(int lf, int rg, int nd, int pos, ll ad) { if(lf == rg) return seg[nd] + ad; else { int mid = (lf + rg)/2; if(pos <= mid) return qry(lf, mid, 2*nd+1, pos, ad + seg[nd]); else return qry(mid+1, rg, 2*nd+2, pos, ad + seg[nd]); } } int main() { int N, Q; ll S, T; scanf("%d %d %lld %lld", &N, &Q, &S, &T); for(int i=0;i<=N;i++) scanf("%lld", &A[i]); ans = 0ll; for(int i=0;i<N;i++) { if(A[i] < A[i + 1]) { ans -= S * (A[i + 1] - A[i]); } else { ans += T * (A[i] - A[i + 1]); } } build(0, N, 0); while(Q--) { int l, r; ll x; scanf("%d %d %lld", &l, &r, &x); if(l > 0) { ll g = qry(0, N, 0, l - 1, 0); ll h = qry(0, N, 0, l, 0); if(g < h) ans += S * (h - g); else ans -= T * (g - h); h += x; if(g < h) ans -= S * (h - g); else ans += T * (g - h); } if(r + 1 <= N) { ll g = qry(0, N, 0, r, 0); ll h = qry(0, N, 0, r + 1, 0); if(g < h) ans += S * (h - g); else ans -= T * (g - h); g += x; if(g < h) ans -= S * (h - g); else ans += T * (g - h); } upd(0, N, 0, l, r, x); printf("%lld\n", ans); } }

Compilation message (stderr)

foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |  scanf("%d %d %lld %lld", &N, &Q, &S, &T);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:44:29: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |  for(int i=0;i<=N;i++) scanf("%lld", &A[i]);
      |                        ~~~~~^~~~~~~~~~~~~~~
foehn_phenomena.cpp:58:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |   scanf("%d %d %lld", &l, &r, &x);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...