Submission #73456

#TimeUsernameProblemLanguageResultExecution timeMemory
73456SmsSAncient Books (IOI17_books)C++14
0 / 100
4 ms684 KiB
#include<bits/stdc++.h> using namespace std; #define for2(a,b,c) for(int a = b; a < c; a++) #include "books.h" #define ll long long const int maxn = 1000100; int par[maxn]; bool seen[maxn]; int getpar(int x){ if(par[x] < 0) return x; return par[x] = getpar(par[x]); } long long minimum_walk(std::vector<int> p, int s) { ll res = 0; int n = p.size(); fill(par,par+n,-1); for2(i,0,n) res += abs(i-p[i]); for2(rep,0,n){ int i = (rep+s)%n; if(seen[i]) continue; int l = min(i,p[i]); int r = max(i,p[i]); bool SS = 0; int L = i; int R = i; seen[i] = 1; while(1){ int j = -1; if(L != l){ L--; j = L; } if(R != r){ R++; j = R; } if( j == -1) break; seen[j] = 1; L = min(L,p[j]); R = max(R,p[j]); int x = getpar(i); int y = getpar(j); if(x == getpar(s) || y == getpar(s)) SS=1; if(x != y){ if(par[x] < par[y]) swap(x,y); par[y] += par[x]; par[x] = y; } } if(SS && rep) res += 2; } for2(i,0,n) if(getpar(i) == i) res += 2; res -= 2; for(int i = n-1; i > s; i--){ if(par[getpar(i)] != -1) break; res -= 2; } for2(i,0,n){ if(par[getpar(i)] != -1 || i == s) break; res -= 2; } return res; }
#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...