Submission #399759

#TimeUsernameProblemLanguageResultExecution timeMemory
399759LucaDantasAncient Books (IOI17_books)C++17
12 / 100
1 ms332 KiB
#include "books.h" #include <cassert> struct Par { int l, r; }; int abs(int x) { return x < 0 ? -x : x; } std::vector<Par> segmentos; long long minimum_walk(std::vector<int> p, int s) { assert(!s); int n = (int)p.size(); long long ans = 0; int prim = n+1; for(int i = 0, ini = 0, fim = 0; i < n; i++) { if(p[i] == i) { ++ini; continue; } prim = std::min(prim, i); fim = std::max(fim, p[i]); ans += abs(p[i] - i); if(fim == i) segmentos.push_back({ini, fim}), ini = i+1; } for(int i = 0; i < ((int)segmentos.size()) - 1; i++) ans += 2*(segmentos[i+1].l - segmentos[i].r); if(prim < n) ans += prim<<1; 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...