제출 #33279

#제출 시각아이디문제언어결과실행 시간메모리
33279KanvieFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
883 ms17640 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()
{
    scanf("%d%d%lld%lld",&n,&q,&s,&t);
    for(int i=0;i<=n;++i)
    {
        scanf("%lld",&a[i]);
        if(i>=1)
        {
            tg[i]=cal(i);
            ans+=tg[i];
        }
    }
    init(1,1,n);
    while(q--)
    {
        scanf("%d%d%lld",&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);
        }
        printf("%lld\n",ans);
    }
}

컴파일 시 표준 에러 (stderr) 메시지

foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:62:38: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%lld%lld",&n,&q,&s,&t);
                                      ^
foehn_phenomena.cpp:65:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",&a[i]);
                            ^
foehn_phenomena.cpp:75:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%lld",&x,&y,&z);
                                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...