Submission #851288

#TimeUsernameProblemLanguageResultExecution timeMemory
851288Jawad_Akbar_JJFancy Fence (CEOI20_fancyfence)C++14
30 / 100
1045 ms5840 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e5 + 10; int r[N][3]; int w[N]; int h[N]; int pre[N]; int ans = 0; int mod = 1e9 + 7; int power(int a,int b){ if (b==0) return 1; int ans = power(a,b/2); ans = ans*ans; ans %= mod; if (b%2) ans = ans*a; return ans%mod; } int mod_inv(int k){ return power(k,mod-2); } int asd(int a){ int ans = (a*(a+1)); ans = ans%mod; ans = ans*mod_inv(2); ans = ans% mod; return ans; } int answer(int W,int H){ int ans = asd(W); int ans2 = asd(H); return (ans*ans2)%mod ; } int MIN(int l,int r){ int ind = l; for (int i=l;i<=r;i++) if (h[i]<h[ind]) ind = i; return ind; } void solve(int l,int r,int height){ if (r<l or l>r) return; int ind = MIN(l,r); int width = pre[r]-pre[l-1]; if (width<0) width += mod; ans -= answer(width,height); if (ans<0) ans += mod; ans += answer(width,h[ind]); ans %= mod; solve(l,ind-1,h[ind]); solve(ind+1,r,h[ind]); } signed main(){ int n; cin>>n; for (int i=1;i<=n;i++) cin>>h[i]; for (int i=1;i<=n;i++){ cin>>w[i]; pre[i] = pre[i-1] + w[i]; pre[i] %= mod; } solve(1LL,n,0LL); cout<<ans<<endl; }
#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...