This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//~ #include <ext/pb_ds/assoc_container.hpp>
//~ #include <ext/pb_ds/tree_policy.hpp>
using namespace std; //using namespace __gnu_pbds; using namespace chrono;
#define ff first
#define ss second
#define pb push_back
#define gan(x) x.begin(),x.end()
#define rgan(x) x.rbegin(),x.rend()
#define ins insert
#define forn(i, n) for (int i = 0; i < int(n); i++)
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update
typedef long long ll;typedef vector<ll> vecs;typedef vector<vector<ll>> matrix;
const int mod = 1e9+7; const char nl = '\n';
const ll N = 1e5+5;
const ll inf = 1e18;
void ShikiMoril() {
ll n, q, s, t; cin >> n >> q >> s >> t ;
vecs vec (n + 1 ) ;
forn ( i , n + 1 ) cin >> vec [ i ];
vecs v1 ( n + 1 ) ;
ll ans = 0 ;
forn ( i ,n + 1 ) { if ( i == 0 ) continue ;
v1 [ i ] =vec [ i ] - vec [ i - 1 ] ;
if ( v1 [ i ] > 0 ) ans -= v1 [ i ] * s;
else ans -= v1 [ i ] * t ;
}
while ( q -- ) {
ll l ,r , x ; cin >> l >> r >> x ;
if ( v1 [ l ] > 0 ) ans += v1 [ l ] * s ;
else ans += v1 [ l ] * t ;
if ( r + 1 <= n ) { if ( v1 [ r + 1 ] > 0 ) ans += v1 [ r + 1 ] * s ;
else ans += v1 [ r + 1 ] * t ; }
v1 [ l ] += x ;
if ( r + 1 <= n ) v1 [ r + 1 ] = v1 [ r +1 ] - x ;
if ( v1 [ l ] > 0 ) ans -= v1 [ l ] * s ;
else ans -= v1 [ l ] * t ;
if ( r + 1 <= n ){ if ( v1 [ r + 1 ] > 0 ) ans -= v1 [ r + 1 ] * s ;
else ans -= v1 [ r + 1 ] * t ; }
cout << ans << nl;
}
}
signed main() {
ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
ll t = 1; //cin >> t;
while (t--) {
ShikiMoril();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |