이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
typedef pair<long long,long long> ii;
int n,q;
long long a[200005],lz[800005],sum,total,s,t,it[800005];
void update(int k,int l,int r,int L,int R,long long x){
if(r<L||R<l||L>R) return ;
if(L<=l&&r<=R){
lz[k] += x;
return ;
}
int mid = (l+r)/2;
update(k*2,l,mid,L,R,x);
update(k*2+1,mid+1,r,L,R,x);
}
void get(int k,int l,int r,int L,int R){
if(r<L||R<l||L>R) return ;
sum += lz[k];
if(L<=l&&r<=R){
it[k] -= sum;
return ;
}
int mid = (l+r)/2;
get(k*2,l,mid,L,R);
get(k*2+1,mid+1,r,L,R);
}
int main(){
cin.tie(0),cout.tie(0),ios::sync_with_stdio(0);
cin >> n >> q >> s >> t;
for(int i = 1;i<=n+1;i++)
cin >> a[i];
for(int i = 1;i<=n;i++){
if(a[i]<a[i+1])
total-=(a[i+1]-a[i])*s;
else
total+=(a[i]-a[i+1])*t;
}
a[n+2] = a[n+1];
while(q--){
int l,r;
long long x;
cin >> l >> r >> x;
l++; r++;
if(a[l-1]<a[l])
total+=(a[l]-a[l-1])*s;
else
total-=(a[l-1]-a[l])*t;
if(r+1<=n+1){
if(a[r]<a[r+1])
total+=(a[r+1]-a[r])*s;
else
total-=(a[r]-a[r+1])*t;
}
if(l!=r){
a[l] += x; a[r] += x;
}
else a[l]+=x;
if(a[l-1]<a[l])
total-=(a[l]-a[l-1])*s;
else
total+=(a[l-1]-a[l])*t;
if(r+1<=n+1){
if(a[r]<a[r+1])
total-=(a[r+1]-a[r])*s;
else
total+=(a[r]-a[r+1])*t;
}
cout<<total<<"\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... |