#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
const int maxn = 1e5 + 10;
const int mod = 1e9 + 7;
int n, L[maxn], dp[maxn], h[maxn], w[maxn], ps[maxn];
int C(int a) {
return 1ll * a * (a - 1) / 2 % mod;
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> h[i];
for (int i = 1; i <= n; i++)
cin >> w[i];
stack<int> st;
for (int i = 1; i <= n; i++) {
while (!st.empty() && h[st.top()] >= h[i])
st.pop();
L[i] = 0;
if (!st.empty())
L[i] = st.top();
st.push(i);
}
for (int i = 1; i <= n; i++) {
ps[i] = ps[i - 1] + w[i];
ps[i] %= mod;
}
ll ans = 0;
dp[0] = 0;
// cout << L[1] << '\n';
for (int i = 1; i <= n; i++) {
ll x = ps[i] - ps[L[i]] + mod;
x %= mod;
dp[i] = dp[L[i]] + 1ll * C(h[i] + 1) * x % mod;
ans = ans + 1ll * x % mod * dp[L[i]] % mod;
ans %= mod;
ans = ans + 1ll * C(h[i] + 1) * C(x + 1) % mod;
ans %= mod;
dp[i] %= mod;
// cout << dp[i] << ' ';
}
// cout << '\n';
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... |