Submission #1100037

#TimeUsernameProblemLanguageResultExecution timeMemory
1100037ocasuFancy Fence (CEOI20_fancyfence)C++17
12 / 100
2 ms348 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int m=1e9+7; signed main(){ int n; cin>>n; vector<int> h(n), w(n); for (int i=0; i<n; i++) cin>>h[i]; for (int i=0; i<n; i++) cin>>w[i]; vector<int> sumLeft(n,0), sumRight(n,0); stack<int> sL,sR; for (int i=0; i<n; i++){ while (!sL.empty() and h[sL.top()]>h[i]){ sumLeft[i]+=(sumLeft[sL.top()]+w[sL.top()])%m; sumLeft[i]%=m; sL.pop(); } sL.push(i); } for (int i=n-1; i>=0; i--){ while (!sR.empty() and h[sR.top()]>=h[i]){ sumRight[i]+=(sumRight[sR.top()]+w[sR.top()])%m; sumRight[i]%=m; sR.pop(); } sR.push(i); } ///rwgrgw int ans=0; for (int i=0; i<n; i++){ int hors = (sumLeft[i]*sumRight[i])%m + (sumLeft[i]*w[i])%m+(sumRight[i]*w[i])%m + ((w[i]*((w[i]-1))*(int)500000004)%m)%m + w[i]%m; hors%=m; int verts = ((h[i]*((h[i]-1))*(int)500000004)%m)%m + (h[i])%m; verts%=m; ans+=(hors*verts)%m; ans%=m; } cout<<ans<<'\n'; }
#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...