Submission #332027

#TimeUsernameProblemLanguageResultExecution timeMemory
332027FatihSolakFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
198 ms8076 KiB
#include <bits/stdc++.h> #define ff first #define ss second #define endl "\n" #define all(x) (x).begin(), (x).end() using namespace std; const int INF = (int) 1e9; const int mod = (int) 1e9+7; const int MAXN = (int) 3e5+5; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; struct FenwickTreeOneBasedIndexing { vector<ll> bit; // binary indexed tree ll n; FenwickTreeOneBasedIndexing(ll n) { this->n = n + 1; bit.assign(n + 1, 0); } FenwickTreeOneBasedIndexing(vector<ll> a) : FenwickTreeOneBasedIndexing(a.size()) { for (size_t i = 0; i < a.size(); i++) range_add(i,i, a[i]); } ll sum(ll idx) { ll ret = 0; for (++idx; idx > 0; idx -= idx & -idx) ret += bit[idx]; return ret; } ll sum(ll l, ll r) { return sum(r) - sum(l - 1); } void add(ll idx, ll delta) { for (++idx; idx < n; idx += idx & -idx) bit[idx] += delta; } void range_add(ll l, ll r, ll val) { add(l, val); add(r + 1, -val); } ll point_query(ll idx) { ll ret = 0; for (++idx; idx > 0; idx -= idx & -idx) ret += bit[idx]; return ret; } }; ll n,q,s,t; ll calc(ll a, ll b){ if(a < b){ return -(s*(b-a)); } else{ return t*(a-b); } } void solve(){ cin >> n >> q >> s >> t; vector<ll> a(n+1); for(ll i=0;i<=n;i++){ cin >> a[i]; } ll ans = 0; for(int i=0;i<n;i++){ ans += calc(a[i],a[i+1]); } FenwickTreeOneBasedIndexing bt(a); //cout << ans << endl; while(q--){ ll l,r,val; cin >> l >> r >> val; ll nowl = bt.point_query(l); ll nowr = bt.point_query(r); ll nowll = bt.point_query(l-1); ll nowrr = bt.point_query(min(n,r+1)); ll now_suml = calc(nowll,nowl); ll now_sumr = calc(nowr,nowrr); bt.range_add(l,r,val); ll posl = bt.point_query(l); ll posr = bt.point_query(r); ll posll = bt.point_query(l-1); //cout << posll << " " << posl << endl; ans += calc(posll,posl) - now_suml; //cout << ans << endl; if(r!=n){ ll posrr = bt.point_query(r+1); //cout << posr << " " << posrr << endl; ans += calc(posr,posrr) - now_sumr; } cout << ans << endl; //break; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t=1; //cin>>t; while(t--){ solve(); } #ifdef Local cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds "; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...