This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n; cin>>n;
vector<int> h(n), w(n);
for (int i=0; i<n; i++) cin>>h[i];
for (int i=0; i<n; i++) cin>>w[i];
vector<int> sumLeft(n,0), sumRight(n,0);
stack<int> sL,sR;
for (int i=0; i<n; i++){
while (!sL.empty() and h[sL.top()]>h[i]){
sumLeft[i]+=sumLeft[sL.top()]+w[sL.top()];
sL.pop();
}
sL.push(i);
}
for (int i=n-1; i>=0; i--){
while (!sR.empty() and h[sR.top()]>=h[i]){
sumRight[i]+=sumRight[sR.top()]+w[sR.top()];
sR.pop();
}
sR.push(i);
}
///rwgrgw
int ans=0;
for (int i=0; i<n; i++){
int hors = sumLeft[i]*sumRight[i] + sumLeft[i]*w[i]+sumRight[i]*w[i] + (w[i]*(w[i]-1))/2 + w[i];
int verts = (h[i]*(h[i]-1))/2 + h[i];
ans+=hors*verts;
}
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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |