제출 #1219058

#제출 시각아이디문제언어결과실행 시간메모리
1219058duongquanghai08Fancy Fence (CEOI20_fancyfence)C++20
100 / 100
16 ms4972 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e5 + 5; const int MOD = 1e9 + 7; const int inv2 = 500000004; int n; int h[N], w[N], ps[N], dp[N]; int l[N]; void Solve() { cin >> n; for (int i = 1; i <= n; i++) cin >> h[i]; for (int i = 1; i <= n; i++) { cin >> w[i]; ps[i] = ps[i - 1] + w[i]; } long long ans = 0; stack<int> st; for (int i = 1; i <= n; i++) { while (!st.empty() && h[st.top()] >= h[i]) { st.pop(); } l[i] = st.empty() ? 0 : st.top(); st.push(i); int sh = h[i] % MOD * (h[i] % MOD + 1) % MOD * inv2 % MOD; int sw = w[i] % MOD * (w[i] % MOD + 1) % MOD * inv2 % MOD; ans = (ans + sh * sw) % MOD; int W1 = (ps[i - 1] - ps[l[i]]); W1 = (W1 % MOD + MOD) % MOD; int S1 = (dp[l[i]] + W1 * sh) % MOD; ans = (ans + S1 * w[i]) % MOD; int W2 = (ps[i] - ps[l[i]]); W2 = (W2 % MOD + MOD) % MOD; dp[i] = (dp[l[i]] + W2 * sh) % MOD; } cout << ans; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); Solve(); 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...