#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
int32_t main () {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int N;
cin >> N;
vector<ll> h(N), w(N);
for (int i = 0;i < N;i ++) cin >> h[i];
for (int i = 0;i < N;i ++) cin >> w[i];
ll sum = 0, res = 0;
stack<array<ll, 2>> st;
for (int i = 0;i < N;i ++) {
ll cnt = w[i];
while (st.size() > 0 && st.top()[0] >= h[i]) {
cnt = (cnt + st.top()[1]) % mod;
sum = (sum - (((st.top()[0] * (st.top()[0] + 1) / 2) % mod) * st.top()[1] % mod) + mod) % mod;
sum = (sum + (((h[i] * (h[i] + 1) / 2) % mod) * st.top()[1] % mod)) % mod;
st.pop();
}
st.push({h[i], cnt});
res = (res + (sum * w[i] % mod) % mod);
res = (res + (((h[i] * (h[i] + 1) / 2) % mod) * ((w[i] * (w[i] + 1) / 2) % mod) % mod)) % mod;
sum = (sum + (((h[i] * (h[i] + 1) / 2) % mod) * w[i] % mod)) % mod;
// cout << res << " " << sum << " " << cnt << "\n";
}
cout << res << "\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... |