Submission #503409

#TimeUsernameProblemLanguageResultExecution timeMemory
503409MasterTasterFancy Fence (CEOI20_fancyfence)C++14
12 / 100
1 ms464 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 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; x=sum(1, w[1]); y=sum(1, h[1]); dp[1]=mul(x, y); cnt[1]=dp[1]; for (int i=2; i<=n; i++) { int ind=pos[i]; cnt[i]=cnt[ind]; /*x=sum(pref[i-1]+1, pref[i]); y=mul(mul(h[ind], h[ind]+1), two); dp[i]=add(dp[i], mul(x, y));*/ ///cout<<i<<" "<<cnt[i]<<endl; x=pref[i-1]-pref[ind]; if (x<0) x+=MOD; y=mul(mul(h[i], h[i]+1), two); cnt[i]=add(cnt[i], mul(x, y)); dp[i]=mul(cnt[i], w[i]); ///cout<<i<<" "<<dp[i]<<endl; ll x, y; x=mul(mul(h[i], h[i]+1), two); y=mul(mul(w[i], w[i]+1), two); cnt[i]=add(cnt[i], mul(x, y)); dp[i]=add(dp[i], mul(x, y)); } for (int i=1; i<=n; i++) { ress=add(dp[i], ress); /*cout<<dp[i]<<" ";*/ } //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...