#include <iostream>
#include <vector>
#define ll long long
using namespace std;
vector <ll> A, B;
ll n, k, t, l, r, mid, X[100000];
bool solve(ll u) {
  int i = 0, j = 0;
  ll xa = 0, xb = 0, tot = 1;
  while (tot && (i < A.size() || j < B.size())) {
    ll k = 2 * u;
    while ((i < A.size() || j < B.size()) && k) {
      ll tmpa = 1e18, tmpb = 1e18;
      if (i < A.size()) tmpa = A[i]-xa;
      if (j < B.size()) tmpb = B[j]-xb;
      if (tmpa <= tmpb) xa += min(tmpa, k), k -= min(tmpa, k);
      else xb += min(tmpb, k), k -= min(tmpb, k);
      while (i < A.size() && xa >= A[i]) ++i, ++tot;
      while (j < B.size() && xb >= B[j]) ++j, ++tot;
    }
    while (i < A.size() && xa >= A[i]) ++i, ++tot;
    while (j < B.size() && xb >= B[j]) ++j, ++tot;
    --tot;
  }
  if (i == A.size() && j == B.size()) return 1;
  else return 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]);
  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... |