제출 #1258576

#제출 시각아이디문제언어결과실행 시간메모리
1258576njoopFancy Fence (CEOI20_fancyfence)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, h[100010], w[100010], p[100010], mod=1e9+7, pos, val, ans;
stack<pair<int, int>> s;

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> h[i];
    }
    for(int i=1; i<=n; i++) {
        cin >> w[i];
        p[i] = p[i-1] + w[i];
        p[i] %= mod;
    }
    s.push({0, 0});
    for(int i=1; i<=n; i++) {
        ans += pos*w[i];
        ans %= mod;
        ans += (w[i]*(w[i]+1)/2%mod)*((h[i]*(h[i]+1)/2%mod));
        ans %= mod;
        while(s.top().second >= h[i]) {
            int cp = s.top().first, ch = s.top().second;
            s.pop();
            pos -= (cp-s.top().first)*ch;
        }
        pos += (p[i]-s.top().first)*((h[i]*(h[i]+1)/2%mod));
        pos += mod*mod;
        pos %= mod;
        s.push({p[i], h[i]});
    }
    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...