Submission #497106

#TimeUsernameProblemLanguageResultExecution timeMemory
497106MohamedAhmed04Foehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
849 ms14444 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 2e5 + 10 ; int arr[MAX] ; int n , q , s , t ; long long tree[4 * MAX] , lazy[4 * MAX] ; void prop(int node , int l , int r) { tree[node] += lazy[node] ; if(l != r) { lazy[node << 1] += lazy[node] ; lazy[node << 1 | 1] += lazy[node] ; } lazy[node] = 0 ; } void update(int node , int l , int r , int from , int to , int val) { prop(node , l , r) ; if(from > r || to < l) return ; if(l >= from && r <= to) { lazy[node] += val ; prop(node , l , r) ; return ; } int mid = (l + r) >> 1 ; update(node << 1 , l , mid , from , to , val) ; update(node << 1 | 1 , mid+1 , r , from , to , val) ; tree[node] = max(tree[node << 1] , tree[node << 1 | 1]) ; } long long query(int node , int l , int r , int from , int to) { prop(node , l , r) ; if(from > r || to < l) return -1e18 ; if(l >= from && r <= to) return tree[node] ; int mid = (l + r) >> 1 ; auto x = query(node << 1 , l , mid , from , to) ; auto y = query(node << 1 | 1 , mid+1 , r , from , to) ; return max(x , y) ; } void update(int l , int r , int x) { update(1 , 0 , n , l , r , x) ; } long long query(int l , int r) { return query(1 , 0 , n , l , r) ; } long long ans = 0 ; void upd(int idx , int sgn) { if(idx == n) return ; long long x = query(idx , idx) , y = query(idx+1 , idx+1) ; if(x < y) ans -= (y - x) * s * sgn ; else ans += (x - y) * t * sgn ; } int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n>>q>>s>>t ; for(int i = 0 ; i <= n ; ++i) cin>>arr[i] ; for(int i = 0 ; i <= n ; ++i) update(i , i , arr[i]) ; for(int i = 0 ; i < n ; ++i) upd(i , 1) ; while(q--) { int l , r , x ; cin>>l>>r>>x ; upd(l-1 , -1) , upd(r , -1) ; update(l , r , x) ; upd(l-1 , 1) , upd(r , 1) ; cout<<ans<<"\n" ; } return 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...