#include<bits/stdc++.h>
const int MOD = int(1e9) + 7;
int f(int a, int b){
b = b % MOD;
return int64_t(a) * (a + 1) / 2 % MOD * int64_t(b) * (b + 1) / 2 % MOD;
}
int main(){
using namespace std;
ios::sync_with_stdio(false), cin.tie(nullptr);
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];
int ans = 0;
for(int i = 0;i < n;i++){
int l = i, r = i;
int64_t sL = 0;
int64_t sR = 0;
while(l - 1 >= 0 && h[l - 1] >= h[i]){
l -= 1;
sL += w[l];
}
while(r + 1 < n && h[r + 1] >= h[i]){
r += 1;
sR += w[r];
}
// but it must strictly contain me
ans += f(h[i], w[i]) * int64_t(sL+1) % MOD * int64_t(sR+1) % MOD;
if(ans >= MOD)
ans -= MOD;
}
cout << ans << '\n';
return 0;
}
# | 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... |