Submission #1016866

#TimeUsernameProblemLanguageResultExecution timeMemory
1016866MrPavlitoFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
494 ms24000 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define sc second #define endl "\n" #define pii pair<int,int> using namespace std; const int MAXN = 2e5+5; const int mod7 = 1e9+7; const long long inf = 1e18; vector<int> seg(MAXN<<2); vector<int> lazy(MAXN<<2); vector<int> niz(MAXN); void build(int nod, int l, int r) { if(l==r) { seg[nod] = niz[l]; return; } int mid = l+r>>1; build(nod<<1, l, mid); build(nod<<1|1, mid+1,r); seg[nod] = seg[nod<<1]+seg[nod<<1|1]; } void push(int nod, int tl, int tr) { if(lazy[nod] == 0)return; if(tl!=tr) { lazy[nod<<1] += lazy[nod]; lazy[nod<<1|1] += lazy[nod]; } seg[nod] += (tr-tl+1)*lazy[nod]; lazy[nod] = 0; } void update(int nod, int tl, int tr, int l, int r, int v) { push(nod, tl, tr); if(tl>r || tr<l || tl>tr)return; if(tl>=l && tr<=r) { lazy[nod]+=v; push(nod, tl, tr); return; } int mid = tl+tr>>1; update(nod<<1,tl, mid, l, r, v); update(nod<<1|1,mid+1, tr, l, r, v); seg[nod] = seg[nod<<1]+seg[nod<<1|1]; } int query(int nod, int tl, int tr, int l, int r) { push(nod,tl,tr); if(tl > r || tr < l)return 0; if(tl>=l && tr<=r)return seg[nod]; int mid = tl+tr>>1; return query(nod<<1,tl, mid, l, r) + query(nod<<1|1, mid+1, tr, l, r); } signed main() { ios_base::sync_with_stdio(false),cin.tie(0), cout.tie(0); int tt=1; //cin >> tt; while(tt--) { int n,q,s,t; cin >> n >> q >> s >> t; int delta = 0; for(int i=0; i<=n; i++)cin >> niz[i]; for(int i=0; i<n; i++) { if(niz[i] < niz[i+1])delta-=abs(niz[i]-niz[i+1])*s; else delta+=abs(niz[i]-niz[i+1])*t; } build(1,1,n); while(q--) { int a,b,x; cin >> a >> b >> x; //a++;b++; if(a!=1) { int q1 = query(1,1,n,a,a); int q2 = query(1,1,n,a-1,a-1); if(q2<q1)delta+=abs(q1-q2)*s; else delta-=abs(q1-q2)*t; } else { int q1 = query(1,1,n,a,a); int q2 = 0; if(q2<q1)delta+=abs(q1-q2)*s; else delta-=abs(q1-q2)*t; } if(b!=n) { int q1 = query(1,1,n,b+1,b+1); int q2 = query(1,1,n,b,b); if(q2<q1)delta+=abs(q1-q2)*s; else delta-=abs(q1-q2)*t; } update(1,1,n, a, b, x); if(a!=1) { int q1 = query(1,1,n,a,a); int q2 = query(1,1,n,a-1,a-1); if(q2<q1)delta-=abs(q1-q2)*s; else delta+=abs(q1-q2)*t; } else { int q1 = query(1,1,n,a,a); int q2 = 0; if(q2<q1)delta-=abs(q1-q2)*s; else delta+=abs(q1-q2)*t; } if(b!=n) { int q1 = query(1,1,n,b+1,b+1); int q2 = query(1,1,n,b, b); if(q2<q1)delta-=abs(q1-q2)*s; else delta+=abs(q1-q2)*t; } cout << delta << endl; //cout << "NIZ: 0 "; //for(int i=1; i<=n; i++)cout << query(1,1,n,i) << " "; //cout << endl; } } } /* 3 3 1 1 0 5 2 1 1 2 -1 1 1 -4 1 1 2 */

Compilation message (stderr)

foehn_phenomena.cpp: In function 'void build(long long int, long long int, long long int)':
foehn_phenomena.cpp:28:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   28 |     int mid = l+r>>1;
      |               ~^~
foehn_phenomena.cpp: In function 'void update(long long int, long long int, long long int, long long int, long long int, long long int)':
foehn_phenomena.cpp:56:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   56 |     int mid = tl+tr>>1;
      |               ~~^~~
foehn_phenomena.cpp: In function 'long long int query(long long int, long long int, long long int, long long int, long long int)':
foehn_phenomena.cpp:68:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   68 |     int mid = tl+tr>>1;
      |               ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...