#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;
    }
    
    ll base = 0;
    for (int i = r.size()-1; i >= 0; i--) {
        ll hh = r[i].fi, ww = r[i].se;
        ll hs = ((hh+1)*hh)/2, ws = ((ww+1)*ww)/2;
        hs %= 1000000007; ws %= 1000000007;
        cnt += (hs*ws)%1000000007; cnt %= 1000000007;
        ll ch = (ww*base)%1000000007;
        cnt += ch*hs; cnt %= 1000000007;
        base += ww; base %= 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... |