답안 #659447

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
659447 2022-11-17T19:26:15 Z Lobo Fancy Fence (CEOI20_fancyfence) C++17
12 / 100
2 ms 468 KB
#include<bits/stdc++.h>
using namespace std;
const long long inf = (long long) 1e18 + 10;
const int inf1 = (int) 1e9 + 10;
#define int long long
#define dbl long double
#define endl '\n'
#define sc second
#define fr first
#define mp make_pair
#define pb push_back
#define all(x) x.begin(), x.end()

const int maxn = 1e5+10;
const int mod = 1e9+7;

int n, h[maxn], w[maxn], ps[maxn];
map<int,vector<int>> ed;

void solve() {
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> h[i];
        ed[h[i]].pb(i);
    }
    for(int i = 1; i <= n; i++) {
        cin >> w[i];
        ps[i] = ps[i-1]+w[i];
    }
    set<pair<int,int>> st;
    st.insert(mp(1,n));
    int curw = ps[n]*(ps[n]+1)/2;
    int ant = 0;
    int ans = 0;
    for(auto X : ed) {
        int val = X.fr;
        // l = ant+1 r = val

        ans+= (curw*((val-ant)*(val+ant+1)/2)%mod)%mod; ans%= mod;
        ant = val;
        for(auto i : X.sc) {
            auto it = st.upper_bound(mp(i,inf)); it--;
            int l = it->fr;
            int r = it->sc;
            curw-= (ps[r]-ps[l-1])*(ps[r]-ps[l-1]+1)/2; curw%= mod;
            st.erase(it);
            if(i != l) {
                st.insert(mp(l,i-1));
                curw+= (ps[i-1]-ps[l-1])*(ps[i-1]-ps[l-1]+1)/2; curw%= mod;
            }
            if(i != r) {
                st.insert(mp(i+1,r));
                curw+= (ps[r]-ps[i])*(ps[r]-ps[i]+1)/2; curw%= mod;
            }
        }
    }

    ans = (ans+mod)%mod;
    cout << ans << endl;
}

int32_t main() {
    ios::sync_with_stdio(false); cin.tie(0);

    // freopen("in.in", "r", stdin);
    // freopen("out.out", "w", stdout);
    int tt = 1;
    // cin >> tt;
    while(tt--) {
        solve();
    }

}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Incorrect 1 ms 468 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 2 ms 468 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Incorrect 1 ms 468 KB Output isn't correct
3 Halted 0 ms 0 KB -