Submission #1298051

#TimeUsernameProblemLanguageResultExecution timeMemory
1298051quan606303Foehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
129 ms10408 KiB
/*
 * @Author: RMQuan 
 * @Date: 2025-12-02 13:25:43 
 * @Last Modified by: RMQuan
 * @Last Modified time: 2025-12-02 14:51:10
 */
/*idea : 



*/
#include <bits/stdc++.h>
bool M1;
#define int long long
#define ll long long
#define INTMAX INT_MAX
#define INTMIN INT_MIN
#define LONGMAX LLONG_MAX
#define LONGMIN LLONG_MIN
#define fi first
#define se second
#define memfull(a,b) memset(a,b,sizeof(a));
#define endl '\n'
#define TASK "TEST"
#define file() if (fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout);}
using namespace std;
const int MOD=1e9+7;
const int maxn=2e5+7;
struct BIT
{
    int N;
    vector<int> bit;
    BIT(int n):N(n),bit(n+5,0){}
    void upd(int x,int val)
    {
        for (;x<=N;x+=(x&-x))bit[x]+=val;
    }
    int get(int x)
    {
        int sum=0;
        for (;x;x&=(x-1))sum+=bit[x];
        return sum;
    }
    void upd_range(int l,int r,int val)
    {
        upd(l,val);
        upd(r+1,-val);
    }
    int get_range(int l,int r)
    {
        return get(r)-get(l-1);
    }
};
int n,q,s,t,a[maxn],ans=0;

int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    file();
    cin>>n>>q>>s>>t;
    n++;
    BIT bit_a(n);
    BIT bit_s(n);
    BIT bit_t(n);
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
        bit_a.upd_range(i,i,a[i]);
    }   
    for (int i=1;i<n;i++)
    {
        if (a[i]<a[i+1])
        {
            bit_s.upd(i,1);
            ans-=(a[i+1]-a[i])*s;
        }
        else 
        {
            ans+=(a[i]-a[i+1])*t;
            bit_t.upd(i,1);
        }
    }
    while (q--)
    {
        int l,r,val;
        cin>>l>>r>>val;
        l++;
        r++; 
        if (l!=1)
        {
            int val1=bit_a.get(l-1);
            int val2=bit_a.get(l);
            if (val1<val2)
            {
                ans+=(val2-val1)*s;
                bit_s.upd(l-1,-1);
            }
            else 
            {
                ans-=(val1-val2)*t;
                bit_t.upd(l-1,-1);
            }
        }
        if (r!=n)
        {
            int val1=bit_a.get(r);
            int val2=bit_a.get(r+1);
            if (val1<val2)
            {
                ans+=(val2-val1)*s;
                bit_s.upd(r,-1);
            }
            else 
            {
                ans-=(val1-val2)*t;
                bit_t.upd(r,-1);
            }
        }
        bit_a.upd_range(l,r,val);
        if (l!=1)
        {
            int val1=bit_a.get(l-1);
            int val2=bit_a.get(l);
            if (val1<val2)
            {
                ans-=(val2-val1)*s;
                bit_s.upd(l-1,1);
            }
            else 
            {
                ans+=(val1-val2)*t;
                bit_t.upd(l-1,1);
            }
        }
        if (r!=n)
        {
            int val1=bit_a.get(r);
            int val2=bit_a.get(r+1);
            if (val1<val2)
            {
                ans-=(val2-val1)*s;
                bit_s.upd(r,1);
            }
            else 
            {
                ans+=(val1-val2)*t;
                bit_t.upd(r,1);
            }
        }
        // cerr<<l-1<<" "<<l<<" "<<n<<endl;
        cout<<ans<<endl;
    }
    return 0;
}

Compilation message (stderr)

foehn_phenomena.cpp: In function 'int32_t main()':
foehn_phenomena.cpp:25:50: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 | #define file() if (fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout);}
      |                                           ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:61:5: note: in expansion of macro 'file'
   61 |     file();
      |     ^~~~
foehn_phenomena.cpp:25:81: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 | #define file() if (fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout);}
      |                                                                          ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:61:5: note: in expansion of macro 'file'
   61 |     file();
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...