Submission #204165

#TimeUsernameProblemLanguageResultExecution timeMemory
204165mdn2002Foehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
954 ms13432 KiB
#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
long long n,q,s,t,ps[200005],a[200005],ans,sqt;
vector<pair<int,pair<int,int> > >v;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    scanf("%lld",&n);
    scanf("%lld",&q);
    scanf("%lld",&s);
    scanf("%lld",&t);
    sqt=ceil(sqrt(q));
    long long b;
    scanf("%lld",&b);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        long long aa=a[i];
        long long dif=b-aa;
        if(dif>=0)ans+=dif*t;
        else ans+=dif*s;
        b=aa;
    }
    long long l,r,x,dif=0;
    while(q--)
    {
        scanf("%lld",&l);
        scanf("%lld",&r);
        scanf("%lld",&x);
        long long la=a[l],ra=a[r],oa=a[l-1],va=a[r+1];
        for(int i=0;i<v.size();i++)
        {
            long long ll=v[i].first,rr=v[i].second.first,xx=v[i].second.second;
            if(ll<=l&&l<=rr)la+=xx;
            if(ll<=r&&r<=rr)ra+=xx;
            if(ll<=l-1&&l-1<=rr)oa+=xx;
            if(ll<=r+1&&r+1<=rr)va+=xx;
        }
        v.push_back({l,{r,x}});
        long long ll=la+x,rr=ra+x;
        if(l>0)
        {
            dif=oa-la;
            if(dif>=0)ans-=dif*t;
            else ans-=dif*s;
            dif=oa-ll;
            if(dif>=0)ans+=dif*t;
            else ans+=dif*s;
        }
        if(r<n)
        {
            dif=ra-va;
            if(dif>=0)ans-=dif*t;
            else ans-=dif*s;
            dif=rr-va;
            if(dif>=0)ans+=dif*t;
            else ans+=dif*s;
        }
        printf("%lld\n",ans);
        if(v.size()<sqt)continue;
        for(int i=0;i<v.size();i++)
        {
            long long ll=v[i].first,rr=v[i].second.first,xx=v[i].second.second;
            ps[ll]+=xx,ps[rr+1]-=xx;
        }
        for(int i=1;i<=n;i++)
        {
            ps[i]+=ps[i-1];
            a[i]+=ps[i];
        }
        for(int i=1;i<=n;i++)ps[i]=0;
        v.clear();
    }
}

Compilation message (stderr)

foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:36:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<v.size();i++)
                     ~^~~~~~~~~
foehn_phenomena.cpp:65:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(v.size()<sqt)continue;
            ~~~~~~~~^~~~
foehn_phenomena.cpp:66:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<v.size();i++)
                     ~^~~~~~~~~
foehn_phenomena.cpp:13:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld",&n);
     ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:14:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld",&q);
     ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:15:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld",&s);
     ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld",&t);
     ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:19:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld",&b);
     ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:22:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",&a[i]);
         ~~~~~^~~~~~~~~~~~~~
foehn_phenomena.cpp:32:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",&l);
         ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:33:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",&r);
         ~~~~~^~~~~~~~~~~
foehn_phenomena.cpp:34:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",&x);
         ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...