Submission #1155757

#TimeUsernameProblemLanguageResultExecution timeMemory
1155757ace5Fancy Fence (CEOI20_fancyfence)C++20
100 / 100
60 ms6580 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = 1e18; const int mod = int(1e9)+7; vector<pair<ll,pair<ll,ll>>> ev; set<pair<ll,ll>> seg; ll cans = 0; ll res = 0; ll get_ans(ll rh,ll lh) { return (cans * ((rh * (rh+1) /2 - lh * (lh+1) /2)%mod))%mod; } ll get_cans(pair<ll,ll> cseg) { __int128 len = cseg.second-cseg.first; return (len * (len+1) / 2) % mod; } void ins(pair<ll,ll> tseg) { // cout << tseg.first << ' ' << tseg.second << "\n"; auto it = seg.lower_bound(tseg); pair<ll,ll> ro = {INF,INF}; if(it != seg.end()) ro = (*it); pair<ll,ll> lo = {-INF,-INF}; if(it != seg.begin()) { lo = *(--it); } if(lo.second == tseg.first) { seg.erase(lo); cans = (cans-get_cans(lo)+mod)%mod; tseg.first = lo.first; } if(ro.first == tseg.second) { seg.erase(ro); cans = (cans-get_cans(ro)+mod)%mod; tseg.second = ro.second; } seg.insert(tseg); cans = (cans + get_cans(tseg))%mod; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; ll h[n],l[n],r[n]; for(int i = 0;i < n;++i) { cin >> h[i]; } for(int i = 0;i < n;++i) { cin >> r[i]; r[i] += (i == 0 ? 0 : r[i-1]); l[i] = (i == 0 ? 0 : r[i-1]); ev.push_back({h[i],{l[i],r[i]}}); } sort(ev.rbegin(),ev.rend()); for(int i = 0;i < ev.size();++i) { ins(ev[i].second); res = (res+get_ans(ev[i].first,(i+1 == ev.size() ? 0 : ev[i+1].first)))%mod; } cout << res << "\n"; return 0; }
#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...