제출 #1290903

#제출 시각아이디문제언어결과실행 시간메모리
1290903loomFancy Fence (CEOI20_fancyfence)C++20
100 / 100
20 ms5976 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define inf (int)2e18 #define nl '\n' const int mod = 1e9+7; void solve(){ int n; cin>>n; int h[n], w[n], pre[n]; for(int i = 0; i < n; i++) cin>>h[i]; for(int i = 0; i < n; i++) cin>>w[i], pre[i] = ((i == 0 ? 0 : pre[i-1]) + w[i]) % mod; vector<pair<int,int>> v; int ps[n]; for(int i = 0; i < n; i++){ while(!v.empty() and v.back().second >= h[i]) v.pop_back(); if(v.empty()) ps[i] = -1; else ps[i] = v.back().first; v.push_back({i, h[i]}); } int ans = 0; int dp[n]; for(int i = 0; i < n; i++){ int j = ps[i]; int sum = (pre[i] - (j == -1 ? 0 : pre[j]) + mod) % mod; dp[i] = sum * (h[i] * (h[i] + 1) / 2 % mod) % mod + (j == -1 ? 0 : dp[j]); dp[i] %= mod; ans += dp[i] * w[i]; ans %= mod; ans += mod - w[i] * w[i] % mod * (h[i] * (h[i] + 1) / 2 % mod) % mod; ans += w[i] * (w[i] + 1) / 2 % mod * (h[i] * (h[i] + 1) / 2 % mod); ans %= mod; } cout<<ans; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL);cout.tie(NULL); 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...