Submission #503802

#TimeUsernameProblemLanguageResultExecution timeMemory
503802MasterTasterFancy Fence (CEOI20_fancyfence)C++14
27 / 100
30 ms6948 KiB
#include <bits/stdc++.h> #define pb push_back #define ll long long #define pii pair<int, int> #define xx first #define yy second #define MAXN 100010 #define MOD 1000000007 using namespace std; ll two=500000004; //inv ll n, dp[MAXN], pos[MAXN], h[MAXN], w[MAXN], pref[MAXN], cnt[MAXN], ress; ll add(ll x, ll y) { ll ret=x+y; if (ret>=MOD) ret-=MOD; return ret; } ll mul(ll x, ll y) { ll ret=x*y; if (ret>=MOD) ret%=MOD; return ret; } ll sub(ll x, ll y) { ll ret=x-y; if (ret<0) ret+=MOD; return ret; } ll sum(ll x, ll y) { ll ret=mul(mul(y, y+1), two); ret-=mul(mul(x-1, x), two); if (ret<0) ret+=MOD; return ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; for (int i=1; i<=n; i++) cin>>h[i]; for (int i=1; i<=n; i++) cin>>w[i]; stack<pii> st; st.push({-1, 0}); for (int i=1; i<=n; i++) { while (st.top().xx>=h[i]) st.pop(); pos[i]=st.top().yy; st.push({h[i], i}); } pref[0]=0; for (int i=1; i<=n; i++) pref[i]=add(pref[i-1], w[i]); ll x, y; cnt[1]=sum(1, h[1]); for (int i=2; i<=n; i++) { int ind=pos[i]; cnt[i]=cnt[ind]; x=pref[i]-pref[ind]; y=sum(1, h[i]); ll pom=mul(x, y); cnt[i]=add(cnt[i], pom); } dp[1]=mul(sum(1, w[1]), sum(1, h[1])); for (int i=2; i<=n; i++) { int ind=pos[i]; dp[i]=mul(cnt[ind], w[i]); x=mul(pref[i-1]-pref[ind], w[i]); y=sum(1, h[i]); dp[i]=add(dp[i], mul(x, y)); x=sum(1, w[i]); y=sum(1, h[i]); dp[i]=add(dp[i], mul(x, y)); } for (int i=1; i<=n; i++) { ress=add(dp[i], ress); /*cout<<cnt[i]<<" "<<dp[i]<<endl;*/ } //cout<<endl; cout<<ress; } /* 3 1 2 1 1 2 3 */
#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...