Submission #99736

#TimeUsernameProblemLanguageResultExecution timeMemory
99736psmaoFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
843 ms23032 KiB
#include <bits/stdc++.h> using namespace std; #define fo(i,s,t) for(int i = s; i <= t; ++ i) #define fd(i,s,t) for(int i = s; i >= t; -- i) #define bf(i,s) for(int i = head[s]; i; i = e[i].next) #define mp make_pair #define fi first #define se second #define pii pair<int,int> #define pb push_back #define VI vector<int> #define sf scanf #define pf printf #define fp freopen #define SZ(x) ((int)(x).size()) #ifdef MPS #define D(x...) printf(x) #else #define D(x...) #endif typedef long long ll; typedef double db; typedef unsigned long long ull; const int inf = 1<<30; const ll INF = 1ll<<60; const db Inf = 1e20; const db eps = 1e-9; void gmax(int &a,int b){a = (a > b ? a : b);} void gmin(int &a,int b){a = (a < b ? a : b);} const int maxn = 200050; int n, q, s, t, a[maxn]; struct node{ll sum, tag; int l, r;}tr[maxn<<2]; void pd(int k) { if(tr[k].tag) { tr[k<<1].tag += tr[k].tag; tr[k<<1|1].tag += tr[k].tag; tr[k<<1].sum += tr[k].tag * (tr[k<<1].r - tr[k<<1].l + 1); tr[k<<1|1].sum += tr[k].tag * (tr[k<<1|1].r - tr[k<<1|1].l + 1); tr[k].tag = 0; } } void pu(int k) { tr[k].sum = tr[k<<1].sum + tr[k<<1|1].sum; } void build(int l, int r, int k = 1) { tr[k].l = l; tr[k].r = r; tr[k].tag = 0; if(l == r) {tr[k].sum = a[l]; return;} int mid = l + r >> 1; build(l, mid, k<<1); build(mid+1, r, k<<1|1); pu(k); } void upd(int l, int r, int x, int k = 1) { if(l <= tr[k].l && tr[k].r <= r) { tr[k].sum += x * (tr[k].r - tr[k].l + 1); tr[k].tag += x; return; } pd(k); int mid = tr[k].l + tr[k].r >> 1; if(r <= mid) upd(l, r, x, k<<1); else if(l > mid) upd(l, r, x, k<<1|1); else upd(l, mid, x, k<<1), upd(mid+1, r, x, k<<1|1); pu(k); } ll ask(int p, int k = 1) { if(tr[k].l == tr[k].r) return tr[k].sum; pd(k); int mid = tr[k].l + tr[k].r >> 1; if(p <= mid) return ask(p, k<<1); else return ask(p, k<<1|1); } int main() { #ifdef MPS fp("1.in","r",stdin); fp("1.out","w",stdout); #endif sf("%d%d%d%d",&n,&q,&s,&t); s = -s; fo(i,0,n) sf("%d",&a[i]); ll ans = 0; fo(i,0,n-1) if(a[i] < a[i+1]) ans += (a[i+1]-a[i])*1ll*s; else ans += (a[i]-a[i+1])*1ll*t; build(0, n); fo(i,1,q) { int l, r, x; sf("%d%d%d",&l,&r,&x); ll oa = ask(l), ob = ask(r), w; w = ask(l-1); ans -= abs(oa - w) * 1ll * (w < oa ? s : t); if(r != n) { w = ask(r+1); ans -= abs(ob - w) * 1ll * (ob < w ? s : t); } upd(l, r, x); oa = ask(l); ob = ask(r); w = ask(l-1); ans += abs(oa - w) * 1ll * (w < oa ? s : t); if(r != n) { w = ask(r+1); ans += abs(ob - w) * 1ll * (ob < w ? s : t); } pf("%lld\n",ans); } return 0; }

Compilation message (stderr)

foehn_phenomena.cpp: In function 'void build(int, int, int)':
foehn_phenomena.cpp:57:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid = l + r >> 1;
            ~~^~~
foehn_phenomena.cpp: In function 'void upd(int, int, int, int)':
foehn_phenomena.cpp:71:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid = tr[k].l + tr[k].r >> 1;
            ~~~~~~~~^~~~~~~~~
foehn_phenomena.cpp: In function 'll ask(int, int)':
foehn_phenomena.cpp:81:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid = tr[k].l + tr[k].r >> 1;
            ~~~~~~~~^~~~~~~~~
foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:91:4: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  sf("%d%d%d%d",&n,&q,&s,&t);
    ^
foehn_phenomena.cpp:93:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  fo(i,0,n) sf("%d",&a[i]);
              ^
foehn_phenomena.cpp:102:5: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   sf("%d%d%d",&l,&r,&x);
     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...