#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
const int mod=1e9+7;
int sum(int x,int y){
if(x+y<mod)return x+y;
return x+y-mod;
}
int sub(int x,int y){
if(y)y=mod-y;
return sum(x,y);
}
int mul(ll x,ll y){
return x*y%mod;
}
int cal(int x){
return mul(mul(x,sum(x,1)),500000004);
}
int n;
int h[100023],w[100023];
int ans=0;
int main(){
ios_base::sync_with_stdio(23^23);cin.tie(NULL);
cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i];
}
for(int i=1;i<=n;i++){
cin>>w[i];
}
vector<pair<int,int>>sta;
int val=0;
for(int i=1;i<=n;i++){
int x=0;
while(sta.size()&&sta.back().fr>=h[i]){
val=sub(val,mul(sta.back().sc,cal(sta.back().fr)));
x=sum(x,sta.back().sc);
sta.pop_back();
}
if(x){
sta.pb({h[i],x});
val=sum(val,mul(x,cal(h[i])));
}
ans=sum(ans,mul(val,w[i]));
ans=sum(ans,mul(cal(w[i]),cal(h[i])));
x=w[i];
while(sta.size()&&sta.back().fr>=h[i]){
val=sub(val,mul(sta.back().sc,cal(sta.back().fr)));
x=sum(x,sta.back().sc);
sta.pop_back();
}
if(x){
sta.pb({h[i],x});
val=sum(val,mul(x,cal(h[i])));
}
}
cout<<ans<<endl;
}
| # | 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... |