이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
cerr<<vars<<" = ";
string delim="";
(...,(cerr<<delim<<values,delim=", "));
cerr<<"\n";
}
#else
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {}
#endif
#define FOR(i,j,n) for(int i=j;i<n;i++)
#define pb push_back
#define sz(x) (int)(x.size())
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
template<typename T> inline void maxa(T& a,T b){a=max(a,b);}
template<typename T> inline void mina(T& a,T b){a=min(a,b);}
const int mxN=2e5+5;
ll add[mxN],diff[mxN],a[mxN];
int main(){
cin.sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#ifdef LOCAL
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int n,q,s,t; cin>>n>>q>>s>>t;
ll ans=0;
for(int i=0;i<=n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
diff[i]=a[i]-a[i+1];
if(diff[i]<0)
add[i]=s;
else
add[i]=t;
ans+=diff[i]*add[i];
}
while(q--){
int l,r,x; cin>>l>>r>>x;
ans-=add[l-1]*diff[l-1];
diff[l-1]-=x;
if(diff[l-1]<0)
add[l-1]=s;
else
add[l-1]=t;
ans+=add[l-1]*diff[l-1];
if(r<n){
ans-=add[r]*diff[r];
diff[r]+=x;
if(diff[r]<0)
add[r]=s;
else
add[r]=t;
ans+=add[r]*diff[r];
}
cout<<ans<<"\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |