Submission #224197

#TimeUsernameProblemLanguageResultExecution timeMemory
224197Ruxandra985Foehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
380 ms15728 KiB
#include <bits/stdc++.h>

using namespace std;

long long aint[800010] , v[200010];

void build (long long nod , long long st , long long dr){
    long long mid = (st + dr)/2;

    if (st == dr){
        aint[nod] = v[st];
        return;
    }

    build (2 * nod , st , mid);
    build (2 * nod + 1 , mid + 1 , dr);

}

void update (long long nod , long long st , long long dr , long long l , long long r , long long val){
    long long mid = (st + dr)/2;

    if (l <= st && dr <= r){
        aint[nod] += val;
        return;
    }

    aint[2 * nod] += aint[nod];
    aint[2 * nod + 1] += aint[nod];

    aint[nod] = 0;

    if (l <= mid)
        update (2 * nod , st , mid , l , r , val);
    if (mid + 1 <= r)
        update (2 * nod + 1 , mid + 1 , dr , l , r , val);


}

long long query (long long nod , long long st , long long dr , long long p){

    long long mid = (st + dr)/2;

    if (st == dr){
        return aint[nod];
    }

    aint[2 * nod] += aint[nod];
    aint[2 * nod + 1] += aint[nod];

    aint[nod] = 0;

    if (p <= mid)
        return query (2 * nod , st , mid , p);
    else
        return query (2 * nod + 1 , mid + 1 , dr , p);


}

int main()
{
    FILE *fin = stdin;
    FILE *fout = stdout;
    long long n , i , q , s , t , sol , p1 , p2 , q1 , q2 , l , r , x;
    fscanf (fin,"%lld%lld%lld%lld",&n,&q,&s,&t);
    /// temp scade cu s / unitate cand alt creste
    /// temp creste cu t / unitate cand alt scade

    for (i = 0 ; i <= n ; i++){
        fscanf (fin,"%lld",&v[i]);
    }

    build (1 , 0 , n);

    sol = 0;

    for (i = 0 ; i < n ; i++){
        if (v[i] < v[i + 1])
            sol = sol - s * (v[i + 1] - v[i]);
        else sol = sol + t * (v[i] - v[i + 1]);
    }

    for (;q;q--){
        fscanf (fin,"%lld%lld%lld",&l,&r,&x);

        p1 = query (1 , 0 , n , l - 1);
        p2 = query (1 , 0 , n , l);

        if (p1 < p2)
            sol = sol + s * (p2 - p1);
        else sol = sol - t * (p1 - p2);

        q1 = query (1 , 0 , n , r);
        q2 = query (1 , 0 , n , r + 1);

        if (r != n){

            if (q1 < q2)
                sol = sol + s * (q2 - q1);
            else sol = sol - t * (q1 - q2);

        }

        update (1 , 0 , n , l , r , x);

        p2 += x;
        q1 += x;

        if (p1 < p2)
            sol = sol - s * (p2 - p1);
        else sol = sol + t * (p1 - p2);


        if (r != n){

            if (q1 < q2)
                sol = sol - s * (q2 - q1);
            else sol = sol + t * (q1 - q2);

        }


        fprintf (fout,"%lld\n",sol);

    }

    return 0;
}

Compilation message (stderr)

foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:67:12: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     fscanf (fin,"%lld%lld%lld%lld",&n,&q,&s,&t);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:72:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         fscanf (fin,"%lld",&v[i]);
         ~~~~~~~^~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:86:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         fscanf (fin,"%lld%lld%lld",&l,&r,&x);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...