| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1283116 | Faisal_Saqib | Foehn Phenomena (JOI17_foehn_phenomena) | C++20 | 0 ms | 0 KiB |
/*
VENI VIDI VICI
*/
#ifdef ONLINE_JUDGE
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <string>
#include <numeric>
#include <chrono>
#include <random>
#include <cmath>
#include <utility>
#include <fstream>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
mt19937 RNG(chrono::steady_clock::now().time_since_epoch().count());
using i128 = __int128;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using str = string;
using pi = pair<int, int>;
using pl = pair<ll, ll>;
using vi = vector<int>;
using vl = vector<ll>;
using vpi = vector<pair<int, int>>;
using vvi = vector<vi>;
using sll = set<ll>;
template<class T>
istream& operator>>(istream& is, vector<T>& v) {
for(auto &i:v) is>>i;
return is;
}
template<class T1,class T2>
istream& operator>>(istream& is, pair<T1,T2>& p) {
is>>p.fi>>p.se;
return is;
}
template<class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
for(const auto &i:v) os<<i<<' ';
return os;
}
template<class T1,class T2>
ostream& operator<<(ostream& os, const pair<T1,T2>& p) {
os<<p.fi<<' '<<p.se; return os;
}
void pyn(bool x)
{
cout<<(x?"YES":"NO")<<endl;
}
void pYN(bool x)
{
cout<<(x?"Yes":"No")<<endl;
}
void pAB(bool x)
{
cout<<(x?"Alice":"Bob")<<endl;
}
ll powmod(ll a,ll b,ll modulo)
{
if(b==0){
return 1;
}
ll temp=powmod(a,b/2,modulo);
if(b%2==0){
return (temp*temp)%modulo;
}
else{
return (a*((temp*temp)%modulo))%modulo;
}
}
bool Prime(ll n){
for (ll i = 2; i*i <= n; i++)
if (n % i == 0)
return false;
return (n>1);
}
void readIO() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
}
#endif
void solve();
int32_t main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// readIO();
int uwu=1;
// cin>>uwu;
for(int tc=1;tc<=uwu;tc++) {
// cout<<"Case #"<<tc<<": ";
solve();
}
return 0;
}
#define int ll
const int N=2e5+10;
ll a[N],fen[N],s,t;
void add(int i,int v)
{
i++;
while(i<N)
{
fen[i]+=v;
i+=(i&-i);
}
}
ll get(int x)
{
x++;
ll ans=0;
while(x>0)
{
ans+=fen[x];
x-=(x&-x);
}
return ans;
}
ll vala(int i)
{
return a[i]+get(i);
}
void Update(int l,int r,int x)
{
add(l,x);
add(r+1,-x);
// we want to add in the range [l,r]
// add to prefix [1,r]
// substract
}
ll wind=0;
void contro(int i,ll v=1) // a[i-1]<a[i]
{
ll p=vala(i-1),q=vala(i);
// cout<<"Contro "<<i<<' '<<p<<' '<<q<<' '<<v<<endl;
if(p<q)
{
wind-=v*(q-p)*s;
}
else{
wind+=v*(p-q)*t;
}
}
void solve()
{
ll n,q;
cin>>n>>q>>s>>t;
for(int i=0;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)
{
contro(i,1);
}
// cout<<"Init"<<endl;
// cout<<wind<<endl;
for(int i=0;i<q;i++)
{
int l,r,x;
cin>>l>>r>>x;
// a[l-1] a[l]+x a[l+1]+x .. a[r]+x a[r+1]
contro(l,-1);
if(r<n)
contro(r+1,-1);
Update(l,r,x);
contro(l,1);
if(r<n)
contro(r+1,1);
// for(int i=0;i<=n;i++)
// {
// cout<<vala(i)<<' ';
// }
// cout<<endl;
cout<<wind<<endl;
}
}
