Submission #388562

#TimeUsernameProblemLanguageResultExecution timeMemory
388562KeshiShortcut (IOI16_shortcut)C++17
0 / 100
11 ms19148 KiB
//In the name of God #include <bits/stdc++.h> #include "shortcut.h" using namespace std; typedef long long ll; typedef pair<ll, ll> pll; const ll maxn = 2e5 + 100; const ll mod = 1e9 + 7; const ll inf = 1e18; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("input.txt", "r+", stdin);freopen("output.txt", "w+", stdout); #define pb push_back #define Mp make_pair #define F first #define S second #define Sz(x) ll((x).size()) #define all(x) (x).begin(), (x).end() #define lc (id << 1) #define rc (lc | 1) struct node{ ll mxr, mxl, mx; node(){ mxr = mxl = mx = 0; } }; ll n, ps[maxn], d[maxn]; node seg[maxn << 2]; node mrg(node l, node r){ node nd; nd.mx = max({l.mx, r.mx, l.mxl + r.mxr}); nd.mxl = max(l.mxl, r.mxl); nd.mxr = max(l.mxr, r.mxr); return nd; } void bld(ll id, ll s, ll e){ if(e - s == 1){ seg[id].mx = d[s]; seg[id].mxl = d[s] - ps[s]; seg[id].mxr = d[s] + ps[s]; return; } ll mid = (s + e) >> 1; bld(lc, s, mid); bld(rc, mid, e); seg[id] = mrg(seg[lc], seg[rc]); return; } node get(ll id, ll s, ll e, ll l, ll r){ if(r <= s || e <= l) return node(); if(l <= s && e <= r) return seg[id]; ll mid = (s + e) >> 1; return mrg(get(lc, s, mid, l, r), get(rc, mid, e, l, r)); } node get(ll l, ll r){ return get(1, 0, n, l, r); } long long find_shortcut(int N, vector<int> l, vector<int> D, int c){ n = N; for(ll i = 0; i < n; i++){ d[i] = D[i]; ps[i + 1] = ps[i] + l[i]; } bld(1, 0, n); ll ans = get(0, n).mx; for(ll i = 0; i < n; i++){ for(ll j = i + 1; j < n; j++){ ll x = get(0, i + 1).mxl + get(j, n).mxr - max(0ll, (ps[j] - ps[i]) - c); x = max(x, get(0, j).mx); x = max(x, get(i + 1, n).mx); ans = min(ans, x); } } return ans; } /*int main(){ fast_io; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...