Submission #793222

#TimeUsernameProblemLanguageResultExecution timeMemory
793222SlavicGFancy Fence (CEOI20_fancyfence)C++17
100 / 100
35 ms25816 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(),v.rend() #define pb push_back #define sz(a) (int)a.size() #define int long long const int N = 1e5 + 5, mod = 1e9 + 7, K = 17; int ans = 0; int jump[N][K], h[N], n, p[N], w[N]; int merge(int i, int j) { return h[i] < h[j] ? i : j; } int query(int l, int r) { int j = 31 - __builtin_clz(r - l + 1); return merge(jump[l][j], jump[r - (1 << j) + 1][j]); } void rec(int l, int r) { if(l > r) return; int i = query(l, r); int canh = h[i] * (h[i] + 1) / 2 % mod; int val = (p[i] - (l ? p[l - 1] : 0)) % mod; val *= (p[r] - p[i]) % mod; val %= mod; if(i > l) { val += (p[i - 1] % mod - (l ? p[l - 1] : 0) % mod + mod) % mod * w[i] % mod; } val += w[i] * (w[i] + 1) / 2 % mod; val %= mod; ans += val * canh % mod; ans %= mod; rec(l, i - 1); rec(i + 1, r); } void solve() { cin >> n; for(int i = 0; i < n; ++i) { cin >> h[i]; jump[i][0] = i; } for(int i = 0; i < n; ++i) { cin >> w[i]; p[i] = w[i] + (i ? p[i - 1] : 0); } for(int j = 1; j < K; ++j) { for(int i = 0; i + (1 << j) <= n; ++i) { jump[i][j] = merge(jump[i][j - 1], jump[i + (1 << (j - 1))][j - 1]); } } rec(0, n - 1); cout << ans << "\n"; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; while(t--) { solve(); } }
#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...