제출 #1133587

#제출 시각아이디문제언어결과실행 시간메모리
1133587jerzykAncient Books (IOI17_books)C++20
50 / 100
96 ms15208 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; #define pb push_back #define st first #define nd second typedef long long ll; typedef long double ld; const ll I = 1000'000'000'000'000'000LL; const int II = 2'000'000'000; const ll M = 1000'000'007LL; const int N = 1000'007; bool vis[N]; int tab[N]; vector<pair<int, int>> inter; ll minimum_walk(vector<int> _p, int _s) { int n = (int)_p.size(); ll ans = 0LL; for(int i = 0; i < n; ++i) tab[i] = _p[i]; for(int i = 0; i < n; ++i) { ans += (int)abs(tab[i] - i); if(vis[i]) continue; int l = i, r = i, v = i; while(!vis[v]) { vis[v] = 1; l = min(l, v); r = max(r, v); v = tab[v]; } if(l != r || l == _s) inter.pb(make_pair(l, r)); } sort(inter.begin(), inter.end()); int cur = 0; for(int i = 0; i < (int)inter.size(); ++i) { if(cur < inter[i].st) ans += 2LL * (ll)(inter[i].st - cur); cur = max(cur, inter[i].nd); } 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...