#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
#define ll long long
using namespace std;
vector <ll> A, B, tmpa, tmpb;
ll n, k, t, l, r, mid, X[100000];
bool check(ll u, ll ty) {
  ll p = -1e18, mn = 1e18;
  vector <array<ll, 2>> X, Y;
  if (ty) {
    X.push_back({0, (ll)1e18});
    Y.push_back({0, (ll)1e18});
    p = 0;
  }
  for (ll i=0; i<tmpa.size(); ++i) {
    mn = min(mn, tmpa[i]);
    if (p < tmpa[i] || (p == tmpa[i] && !ty)) {
      p = tmpa[i];
      X.push_back({p, mn});
      mn = 1e18;
    }
  }
  if (p < 0) X.push_back({0, (ll)1e18});
  p = -1e18, mn = 1e18;
  if (ty) p = 0;
  for (ll i=0; i<tmpb.size(); ++i) {
    mn = min(mn, tmpb[i]);
    if (p < tmpb[i] || (p == tmpb[i] && !ty)) {
      p = tmpb[i];
      Y.push_back({p, mn});
      mn = 1e18;
    }
  }
  if (p < 0) Y.push_back({0, (ll)1e18});
  int i = 0, j = 0;
  while (i < (ll)X.size()-1 || j < (ll)Y.size()-1) {
    if (i < (ll)X.size()-1 && Y[j][0]+X[i+1][1] >= 0) ++i;
    else if (j < (ll)Y.size()-1 && X[i][0]+Y[j+1][1] >= 0) ++j;
    else break;
  }
  if (i < (ll)X.size()-1 || j < (ll)Y.size()-1) return 0;
  return 1;
}
bool solve(ll u) {
  u *= 2;
  for (ll i=0; i<A.size(); ++i) tmpa[i] = (i+1)*u - A[i];
  for (ll i=0; i<B.size(); ++i) tmpb[i] = (i+1)*u - B[i];
  bool ok = check(u, 1);
  reverse(tmpa.begin(), tmpa.end());
  reverse(tmpb.begin(), tmpb.end());
  return ok & check(u, 0) & ((tmpa.empty() ? 0 : tmpa[0]) + (tmpb.empty() ? 0 : tmpb[0]) >= 0);
}
int main() {
  cin >> n >> k >> t;
  --k;
  for (int i=0; i<n; ++i) cin >> X[i];
  for (int i=k-1; i>=0; --i) A.push_back(X[k]-X[i]);
  for (int i=k+1; i<n; ++i) B.push_back(X[i]-X[k]);
  tmpa.resize(A.size());
  tmpb.resize(B.size());
  l = 0, r = ((ll)1e9+t-1)/t;
  while (l < r) {
    mid = (l+r)/2;
    if (solve(mid*t)) r = mid;
    else l = mid+1;
  }
  cout << l << '\n';
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |