Submission #1300300

#TimeUsernameProblemLanguageResultExecution timeMemory
1300300trantrungkeinFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
122 ms12820 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 2e5 + 6; int n,q,S,T,a[N],arr[N]; struct BIT{ int bit[N]; BIT(){ memset(bit,0,sizeof(bit));} // int n; // BIT(int n) : n(n){} void update(int id, int val){ for(;id <= n+1; id += -id&id) bit[id]+=val; } int sum(int id){ int res = 0; for(;id > 0; id-=-id&id) res += bit[id]; return res; } int get(int l, int r){ if(l > r) return 0; return sum(r) - sum(l-1); } }base,bs,bt; void Update(int x, int id, int num){ if(x > 0) bs.update(id,num*x); else bt.update(id,num*x); } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n >> q >> S >> T; for(int i = 1; i <= n+1; i++){ cin >> a[i]; arr[i-1] = a[i] - a[i-1]; base.update(i,a[i]-a[i-1]); } for(int i = 1; i <= n; i++){ if(arr[i] > 0) bs.update(i,arr[i]); else bt.update(i,arr[i]); } // cout << bt.get(1,n) << endl; //cout << -S*bs.get(1,n) - T*bt.get(1,n) <<'\n'; while(q--){ int l,r,x; cin >> l >> r >> x; //............... l++; r++; base.update(l,x); base.update(r+1,-x); if(l > 1) { Update(arr[l-1],l-1,-1); arr[l-1] = base.get(1,l) - base.get(1,l-1); Update(arr[l-1],l-1,1); } if(r <= n) { Update(arr[r],r,-1); arr[r] = base.get(1,r+1) - base.get(1,r); Update(arr[r],r,1); } // cout << bt.get(1,n) <<"GG"<< endl; cout << -S*bs.get(1,n) - T*bt.get(1,n) <<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...