Submission #112320

#TimeUsernameProblemLanguageResultExecution timeMemory
112320updown1Ancient Books (IOI17_books)C++17
12 / 100
11 ms384 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define For(i, a, b) for(int i=a; i<b; i++) #define ffi For(i, 0, N) #define ffj For(j, 0, M) #define ffa ffi ffj //#define s <<" "<< #define w cout #define e "\n" #define pb push_back #define mp make_pair #define a first #define b second //#define int ll const int MAXN = 1000000; //Global Variables ll N, out = 0, loc[MAXN], comp[MAXN], at = 0; /// element , element pair<int, int> rng[MAXN]; /// comp bool vis[MAXN], del[MAXN]; /// element , comp void go1(int at, int co) { if (comp[at] != -1) return; rng[co].a = min(rng[co].a, at); rng[co].b = max(rng[co].b, at); comp[at] = co; out += abs(loc[at]-at); go1(loc[at], co); } void go(int at) { if (vis[at]) return; vis[at] = true; go(loc[at]); } ll minimum_walk(vector<int> p, int s) { N = p.size(); ffi {rng[i] = mp(N, -1); comp[i] = -1; loc[i] = p[i];} ffi if (comp[i] == -1) { go1(i, at); at++; } //For (i, 0, at) w<< cost[i]<<e; sort(rng, rng+at); int far = -1; For (i, 0, at) if (rng[i].b >= s) { if (rng[i].a < far) { //w<<"deleting"<<e; del[comp[rng[i].a]] = true; } far = max(far, rng[i].b); } far = N+1; for (int i=at-1; i>=0; i--) if (rng[i].a <= s) { if (rng[i].b > far) { //w<<"deleting"<<e; del[comp[rng[i].a]] = true; } far = min(far, rng[i].a); } int far_rig = s, far_lef = s; ffi if (loc[i] == i || del[comp[i]]) vis[i] = true; //ffi w<< vis[i]<<e; For (i, s, N) if (!vis[i]) {go(i); far_rig = i;} for (int i=s-1; i>=0; i--) if (!vis[i]) {far_lef = i;} return out+2*((s-far_lef)+(far_rig-s)); }
#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...