/*
* @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;
}
컴파일 시 표준 에러 (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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |