#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf (int)2e18
#define nl '\n'
const int mod = 1e9+7;
void solve(){
int n;
cin>>n;
int h[n], w[n], pre[n];
for(int i = 0; i < n; i++) cin>>h[i];
for(int i = 0; i < n; i++) cin>>w[i], pre[i] = ((i == 0 ? 0 : pre[i-1]) + w[i]) % mod;
vector<pair<int,int>> v;
int ps[n];
for(int i = 0; i < n; i++){
while(!v.empty() and v.back().second >= h[i]) v.pop_back();
if(v.empty()) ps[i] = -1;
else ps[i] = v.back().first;
v.push_back({i, h[i]});
}
int ans = 0;
int dp[n];
for(int i = 0; i < n; i++){
int j = ps[i];
int sum = (pre[i] - (j == -1 ? 0 : pre[j]) + mod) % mod;
dp[i] = sum * (h[i] * (h[i] + 1) / 2 % mod) % mod + (j == -1 ? 0 : dp[j]);
dp[i] %= mod;
ans += dp[i] * w[i];
ans %= mod;
ans += mod - w[i] * w[i] % mod * (h[i] * (h[i] + 1) / 2 % mod) % mod;
ans += w[i] * (w[i] + 1) / 2 % mod * (h[i] * (h[i] + 1) / 2 % mod);
ans %= mod;
}
cout<<ans;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);cout.tie(NULL);
int t = 1;
//cin>>t;
while(t--) solve();
}
| # | 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... |