Submission #659449

#TimeUsernameProblemLanguageResultExecution timeMemory
659449LoboFancy Fence (CEOI20_fancyfence)C++17
12 / 100
1 ms468 KiB
#include<bits/stdc++.h> using namespace std; const long long inf = (long long) 1e18 + 10; const int inf1 = (int) 1e9 + 10; #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() const int maxn = 1e5+10; const int mod = 1e9+7; int n, h[maxn], w[maxn], ps[maxn]; map<int,vector<int>> ed; int vz(int a, int b) { return a*b%mod; } void solve() { cin >> n; for(int i = 1; i <= n; i++) { cin >> h[i]; ed[h[i]].pb(i); } for(int i = 1; i <= n; i++) { cin >> w[i]; ps[i] = ps[i-1]+w[i]; } set<pair<int,int>> st; st.insert(mp(1,n)); int curw = ps[n]*(ps[n]+1)/2; curw%= mod; int ant = 0; int ans = 0; for(auto X : ed) { int val = X.fr; // l = ant+1 r = val ans+= (curw*(((val-ant)*(val+ant+1)/2)%mod))%mod; ans%= mod; ant = val; for(auto i : X.sc) { auto it = st.upper_bound(mp(i,inf)); it--; int l = it->fr; int r = it->sc; curw-= (ps[r]-ps[l-1])*(ps[r]-ps[l-1]+1)/2; curw%= mod; st.erase(it); if(i != l) { st.insert(mp(l,i-1)); curw+= (ps[i-1]-ps[l-1])*(ps[i-1]-ps[l-1]+1)/2; curw%= mod; } if(i != r) { st.insert(mp(i+1,r)); curw+= (ps[r]-ps[i])*(ps[r]-ps[i]+1)/2; curw%= mod; } } } ans = (ans+mod)%mod; cout << ans << endl; } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); // freopen("in.in", "r", stdin); // freopen("out.out", "w", stdout); int tt = 1; // cin >> tt; while(tt--) { solve(); } }
#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...