Submission #1017165

#TimeUsernameProblemLanguageResultExecution timeMemory
1017165huutuanBoxes with souvenirs (IOI15_boxes)C++14
100 / 100
548 ms296616 KiB
#include "boxes.h"

#include <bits/stdc++.h>

using namespace std;

int dist(int L, int l, int r){
   if (l>r) swap(l, r);
   return min(r-l, L+l-r);
}

int calc(int L, int l, int r){
   return dist(L, 0, l)+r-l+dist(L, 0, r);
}

const int MN=1e7+10;
long long f[MN], g[MN];

long long delivery(int N, int K, int L, int p[]) {
   K=min(K, N);
   deque<int> dq;
   dq.push_back(0);
   g[0]=f[0]+dist(L, 0, p[0])-p[0];
   f[0]=0;
   for (int i=1; i<=N; ++i){
      while (dq.size() && i-dq.front()>K) dq.pop_front();
      f[i]=g[dq.front()]+p[i-1]+dist(L, 0, p[i-1]);
      if (i<N){
         g[i]=f[i]-p[i]+dist(L, 0, p[i]);
         while (dq.size() && g[dq.back()]>=g[i]) dq.pop_back();
         dq.push_back(i);
      }
   }
   return f[N];
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...