Submission #660337

#TimeUsernameProblemLanguageResultExecution timeMemory
660337uroskAncient Books (IOI17_books)C++14
12 / 100
15 ms23892 KiB
#include "books.h" #define dbg(x) cerr<<#x<<": "<<x<<endl #define here cerr<<"================================\n" #include <bits/stdc++.h> #define ll long long #define llinf 1000000000000000000LL #define pb push_back #define sz(a) (ll)(a.size()) #define all(a) a.begin(),a.end() #define fi first #define sc second #define endl '\n' #define ceri(a,l,r) {for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;} using namespace std; #define maxn 1000005 ll n,st,it; ll a[maxn],col[maxn],mx[maxn],mn[maxn]; vector<ll> g[maxn]; long long minimum_walk(vector<int> p, int s) { n = sz(p); for(ll i = 1;i<=n;i++) a[i] = p[i-1]+1; reverse(all(p)); //if(is_sorted(all(p))&&n==4) return 8; st = s+1; ll ans = 0; for(ll i = 1;i<=n;i++){ if(col[i]) continue; if(i==a[i]) continue; ll x = a[i]; ans+=abs(i-a[i]); it++; col[i] = it; mx[it] = i; mn[it] = i; while(x!=i){ mx[it] = max(mx[it],x); col[x] = it; ans+=abs(x-a[x]); x = a[x]; } } set<ll> cur; for(ll i = 1;i<=n;i++){ if(col[i]){ for(ll j = 1;j<=it;j++) if(mn[j]>=mn[col[i]]&&mn[j]<=mx[col[i]]) cur.insert(j); } if(sz(cur)==it){ ans+=2*(i-1); break; } } return ans; } /* 4 0 0 2 3 1 4 0 3 2 1 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...