Submission #615425

#TimeUsernameProblemLanguageResultExecution timeMemory
615425nohaxjustsofloFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
189 ms13164 KiB
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<ll,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> order_set;
mt19937 mt_rand(chrono::high_resolution_clock::now().time_since_epoch().count());
//uniform_int_distribution<int> gen; ///(min, max)
//int random() {return gen(mt_rand);}
const int mxN=2e5+5;
const int mod=998244353;
const int mxlogN=40;
const int mxK=26;
const int inf=2e9;
const int K=600;
ll a[mxN], ft[mxN];
void add(int i, int v)
{
    while(i<mxN)
    {
        ft[i]+=v;
        i+=i&-i;
    }
}
ll sum(int i)
{
    if(!i) return 0;
    ll s=0;
    while(i)
    {
        s+=ft[i];
        i-=i&-i;
    }
    return s;
}
ll check(int i, ll s, ll t)
{
    if(a[i+1]-a[i]>0) return -(a[i+1]-a[i])*s;
    return -(a[i+1]-a[i])*t;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n,q; ll s,t; cin >> n >> q >> s >> t;
    for(int i=1; i<=n+1; i++)
    {
        cin >> a[i];
        add(i,a[i]-a[i-1]);
    }
    ll ans=0;
    for(int i=n; i; i--) ans+=check(i,s,t);
    while(q--)
    {
        int l, r, x; cin >> l >> r >> x; l++, r++;
        a[l]=sum(l), a[l-1]=sum(l-1), a[r]=sum(r), a[r+1]=sum(r+1);
        ans-=check(l-1,s,t);
        if(r<=n) ans-=check(r,s,t);
        add(l  , x);
        add(r+1,-x);
        a[l]=sum(l), a[l-1]=sum(l-1), a[r]=sum(r), a[r+1]=sum(r+1);
        ans+=check(l-1,s,t);
        if(r<=n) ans+=check(r,s,t);
        cout << ans << "\n";
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...