#include <bits/stdc++.h>
#define ll long long int
#define pb push_back
#define fi first
#define se second
using namespace std;
int main() {
    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];
    deque<pair<ll,ll>> r; ll cnt = 0;
    for (int i = 0; i < n; i++) {
    	if (r.empty()) {r.pb({h[i], w[i]}); continue;}
    	if (h[i] != r.back().fi) {r.pb({h[i], w[i]}); continue;}
    	r.back().se += w[i]; r.back().se %= 1000000007;
    }
    
    // h = 1, bottom
    ll base = 0;
    for (int i = 0; i < n; i++) {base += w[i]; base %= 1000000007;}
    ll baser = ((base+1)*base)/2; baser %= 1000000007;
    cnt += baser; cnt %= 1000000007;
    for (auto x : r) {
    	ll hh = x.fi, ww = x.se;
    	if (hh == 1) continue;
    	// h = 1, top; h = 2
    	ll rect = (ww+1)*ww; rect %= 1000000007;
    	cnt += rect; cnt %= 1000000007;
    }
    cout << cnt;
    
    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... |