제출 #1258585

#제출 시각아이디문제언어결과실행 시간메모리
1258585njoopFancy Fence (CEOI20_fancyfence)C++20
30 / 100
16 ms4424 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int n, h[100010], w[100010], p[100010], mod=1e9+7, pos, val, ans; stack<pair<int, int>> s; int mul(int x) { return (x*(x+1)/2)%mod; } signed main() { cin.tie(0)->sync_with_stdio(0); cin >> n; for(int i=1; i<=n; i++) { cin >> h[i]; } for(int i=1; i<=n; i++) { cin >> w[i]; p[i] = p[i-1] + w[i]; } s.push({0, 0}); for(int i=1; i<=n; i++) { ans += pos*w[i]; ans %= mod; ans += mul(w[i])*mul(h[i]); ans %= mod; while(s.top().second >= h[i]) { int cp = s.top().first, ch = s.top().second; s.pop(); int t = (cp-s.top().first+mod)%mod; pos -= (t*mul(ch))%mod; if(pos < 0) pos += mod; pos %= mod; } pos += ((p[i]-s.top().first+mod)%mod)*mul(h[i]); pos %= mod; s.push({p[i], h[i]}); } cout << ans; 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...