제출 #33278

#제출 시각아이디문제언어결과실행 시간메모리
33278KanvieFoehn Phenomena (JOI17_foehn_phenomena)C++14
30 / 100
366 ms17800 KiB
#include<bits/stdc++.h>
using namespace std;
int x, y, n, q;
long long z, s, t, a[200001], f[800001], tg[200001], lazy[800001], ans;
long long cal(int i)
{
    return t*max(0ll,a[i-1]-a[i])-s*max(0ll,a[i]-a[i-1]);
}
void init(int k, int l, int r)
{
    if(l>r)return;
    if(l==r)
    {
        f[k]=a[l];
        return;
    }
    int mid=(l+r)/2;
    init(2*k,l,mid);
    init(2*k+1,mid+1,r);
    f[k]=max(f[2*k],f[2*k+1]);
}
void dolazy(int k, int l, int r)
{
    if(lazy[k]==0)return;
    f[k]+=lazy[k];
    if(l!=r)
    {
        lazy[2*k]+=lazy[k];
        lazy[2*k+1]+=lazy[k];
    }
    lazy[k]=0;
}
void upd(int k, int l, int r, int L, int R, long long x)
{
    dolazy(k,l,r);
    if(l>r||L>R||R<l||L>r)return;
    if(L<=l&&r<=R)
    {
        f[k]+=x;
        if(l!=r)
        {
            lazy[2*k]+=x;
            lazy[2*k+1]+=x;
        }
        return;
    }
    int mid=(l+r)/2;
    upd(2*k,l,mid,L,R,x);
    upd(2*k+1,mid+1,r,L,R,x);
    f[k]=max(f[2*k],f[2*k+1]);
}
long long gets(int k, int l, int r, int vt)
{
    dolazy(k,l,r);
    if(l>r||vt>r||vt<l)return 0ll;
    if(l==r)return f[k];
    int mid=(l+r)/2;
    return gets(2*k,l,mid,vt)+gets(2*k+1,mid+1,r,vt);
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin>>n>>q>>s>>t;
    for(int i=0;i<=n;++i)
    {
        cin>>a[i];
        if(i>=1)
        {
            tg[i]=cal(i);
            ans+=tg[i];
        }
    }
    init(1,1,n);
    while(q--)
    {
        cin>>x>>y>>z;
        upd(1,1,n,x,y,z);
        a[x]=gets(1,1,n,x);
        a[x-1]=gets(1,1,n,x-1);
        ans+=cal(x)-tg[x];
        tg[x]=cal(x);
        if(y!=n)
        {
            a[y]=gets(1,1,n,y);
            a[y+1]=gets(1,1,n,y+1);
            ans+=cal(y+1)-tg[y+1];
            tg[y+1]=cal(y+1);
        }
        cout<<ans<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...