Submission #1216571

#TimeUsernameProblemLanguageResultExecution timeMemory
1216571tapilyocaAncient Books (IOI17_books)C++20
50 / 100
1705 ms27856 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; template<typename T> using vec = vector<T>; using ll = long long; using vll = vec<ll>; using pll = pair<ll,ll>; #define pb push_back #define dbg(x) cerr << #x << ": " << x << endl ll minimum_walk(std::vector<int> p, int s) { assert(s == 0); ll n = p.size(); ll ans = 0; for(int i = 0; i < n; i++) { ans += abs(i-p[i]); } if(ans == 0) return ans; ll cid = 0; vll id(n,-1); for(int i = 0; i < n; i++) { if(id[i] != -1) continue; ll at = i; id[i] = ++cid; do { at = p[at]; id[at] = cid; } while(at != i); } vll last_book(cid+1,-1); for(ll i = 0; i < n; i++) { last_book[id[i]] = max(last_book[id[i]],i); } ll last_unsorted = n-1; for(ll i = n-1; i >= 0; i--) { if(p[i] != i) { last_unsorted = i; break; } } ll nextFlag = last_book[id[0]]; for(int i = 0; i <= last_unsorted; i++) { if(i <= nextFlag) { nextFlag = max(nextFlag, last_book[id[i]]); } else { dbg(i); ans += 2; nextFlag = last_book[id[i]]; } } // dbg(cid); // for(int i = 0; i < n; i++) { // cerr << id[i] << " "; // } cerr << endl; 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...