Submission #1302127

#TimeUsernameProblemLanguageResultExecution timeMemory
1302127TaxiradioFancy Fence (CEOI20_fancyfence)C++20
100 / 100
65 ms4384 KiB
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> using namespace std; #define int int64_t const int M = 1e9+7; int32_t main() { int n; cin >> n; vector<int> w , h; w.push_back(0); h.push_back(0); for(int i = 0; i < n; i++){ int x; cin >> x; h.push_back(x); } for(int i = 0; i < n; i++){ int x; cin >> x; w.push_back(x+w.back()); } w.push_back(w.back()); h.push_back(0); vector<int> l(n+2 ,-1) , r(n+2 ,-1); stack<int> s1 , s2; s1.push(0); for(int i = 1; i <= n; i++){ while(h[s1.top()] > h[i]){ s1.pop(); } l[i]=s1.top(); s1.push(i); } s2.push(n+1); for(int i = n; i >= 1; i--){ while(h[s2.top()] >= h[i]){ s2.pop(); } r[i]=s2.top(); s2.push(i); } int ans = 0; for(int i = 1; i <= n; i++){ //cout << i << " " << l[i] << " " << r[i] << endl; int u = max(h[l[i]] , h[r[i]]); int v = w[r[i]-1]-w[l[i]]; v%=M; ans+=((v*(v+1)/2)%M)*(((h[i])*(h[i]+1)/2-(u)*(u+1)/2)%M); //cout << v << " " << u << " " << h[i] << endl; //cout << ans << endl; ans%=M; } 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...