Submission #596690

#TimeUsernameProblemLanguageResultExecution timeMemory
596690farhan132Ancient Books (IOI17_books)C++17
50 / 100
135 ms39884 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll , ll> ii; #define ff first #define ss second #define pb push_back #define in insert long long minimum_walk(std::vector<int> p, int s) { ll n = p.size(); vector < ll > vis(n, 0); ll ans = 0; while(n-1 > s && p[n-1] == n-1 ){ n--; } if(n == 0) return 0; ll l = 0; while(p[l] == l && s > l) l++; ll r = n - 1; ll mx = l; if(s < l){ ans += 2*abs(l - s); s = l; } if(s > r){ ans += 2*abs(r - s); s = r; } //cout << l << ' ' << r << '\n'; vector < ll > P(n + 2, -1), dist(n + 2, 0); vector < ll > st; st.pb(l); P[l] = l; dist[l] = l; for(ll i = l; i <= r; i++){ if(vis[i]) continue; ll c = i; ll _mx = c; while(!vis[c]){ vis[c] = 1; _mx = max(_mx, c); ans += abs(p[c] - c); c = p[c]; } if(mx < i){ P[i] = i; dist[i] = _mx; st.pb(i); }else{ if(i != l) P[i] = P[i - 1]; dist[P[i]] = max(dist[P[i]], _mx); } mx = max(mx, _mx); } ans += 2*st.size() - 2; for(auto L : st){ if(L <= s && s <= dist[L]){ //ans += 2 * min(abs(s - L), abs(s - dist[L])); } } return ans; }
#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...