Submission #112324

#TimeUsernameProblemLanguageResultExecution timeMemory
112324updown1Ancient Books (IOI17_books)C++17
12 / 100
2 ms512 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); } ffi if (loc[i] == i) del[comp[i]] = true; far = s; For (i, 0, at) if (rng[i].b >= s) { if (!del[comp[rng[i].a]]) out += 2*(rng[i].a - far); far = max(far, rng[i].b); //w<< out<<e; } return out; }
#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...