Submission #73414

#TimeUsernameProblemLanguageResultExecution timeMemory
73414NavickAncient Books (IOI17_books)C++17
12 / 100
4 ms620 KiB
#include <bits/stdc++.h> #include "books.h" #define F first #define S second #define pii pair<int, int> #define pb push_back using namespace std; typedef long long ll; const int maxN = 1e6 + 10; bool mark[maxN]; vector <pii> que; bool cmp(pii A, pii B) { return make_pair(A.F, -A.S) < make_pair(B.F, -B.S); } long long minimum_walk(std::vector<int> p, int s) { int n = p.size(), m = 0; ll ans = 0; for (int i=0; i<n; i++) { if(mark[i]) continue ; int curr = i, mn = n, sz = 0, mx = 0; while(!mark[curr]) { mn = min(mn, curr); mx = max(mx, curr); sz ++; mark[curr] = true; ans += abs(p[curr] - curr); curr = p[curr]; } if(mx != mn) que.pb({mn, mx}); } sort(que.begin(), que.end(), cmp); int len = que.size(); int maxR = -1; for (int i=0; i<len; i++) { if(maxR < que[i].F) m = que[i].F; maxR = max(maxR, que[i].S); } return ans + 2LL * m; }
#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...