Submission #1188324

#TimeUsernameProblemLanguageResultExecution timeMemory
1188324NoMercyFancy Fence (CEOI20_fancyfence)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int 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 += st.top()[1];
            sum -= (st.top()[0] * (st.top()[0] + 1) / 2) * st.top()[1];
            st.pop();
        }
        st.push({h[i], cnt});
        res += (sum * cnt);
        res %= mod;
        res += ((h[i] * (h[i] + 1) / 2) * (cnt * (cnt + 1) / 2));
        res %= mod;
        sum += ((h[i] * (h[i] + 1) / 2) * cnt);
        // cout << res << " " << sum << " " << cnt << "\n";
    }
    cout << res << "\n";
}
#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...