Submission #1288173

#TimeUsernameProblemLanguageResultExecution timeMemory
1288173zyntherixFancy Fence (CEOI20_fancyfence)C++20
100 / 100
18 ms4164 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pi pair<int, int> #define vi vector<int> #define vs vector<string> #define vb vector<bool> #define vpi vector<pi> #define pb push_back #define all(a) (a).begin(), (a).end() const int mod = 1e9 + 7; int md_inv_2 = 500000004; int sm(int x) { return (((x * (x + 1)) % mod) * md_inv_2) % mod; } void solve() { int n; cin >> n; int h[n + 1], w[n + 1]; for (int i = 0; i < n; i++) cin >> h[i]; for (int i = 0; i < n; i++) { cin >> w[i]; } h[n] = 0; w[n] = 0; vpi v; // height, start_pos v.pb({0, 0}); int ans = 0; int pos = 1; for (int i = 0; i <= n; i++) { int curr = pos; int gwi = 0; while (h[i] < v.back().first) { auto x = v.back(); v.pop_back(); int wi = (((curr - x.second) % mod) + mod) % mod; gwi = (gwi + wi) % mod; int hz = (((sm(x.first) - sm(h[i])) % mod) + mod) % mod; int vr = (((sm(gwi) - sm(gwi - wi)) % mod) + mod) % mod; ans = (ans + (hz * vr) % mod) % mod; curr = x.second; } if (h[i] > v.back().first) { v.pb({h[i], curr}); } pos = (pos + w[i]) % mod; } cout << ans << '\n'; } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int t = 1; // cin >> t; while (t--) { 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...