| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 113807 | aminra | Sparklers (JOI17_sparklers) | C++14 | 0 ms | 0 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int MOD = (int)1e9 + 7;
const int MAXN = (int)1e5 + 3;
const int infint = (int)1e9 + 3;
const ll inf = (ll)2e18;
ll n, k, t, X[MAXN];
bool make(vector <ll> x, vector <ll> y)
{
	if (x[0] < y[0])
		return 0;
  	int ok = 1;
  	pair<int, int> L, R;
  	L = {0, 0};
  	R = {0, 0};
  	while (ok)
  	{
    	ok = 0;
    	while (L.first + 1 < x.size() && x[L.first + 1] >= y[R.second])
		{
      		ok = 1;
      		if (x[++L.first] > x[L.second])
			  	L.second = L.first;
    	}
		while (R.first + 1 < y.size() && y[R.first + 1] <= x[L.second])
		{
      		ok = 1;
      		if (y[++R.first] < y[R.second])
				R.second = R.first;
    	}
  	}
  	return L.first + 1 == x.size() && R.first + 1 == y.size();
}
 
bool check(int s)
{
	vector <ld> x, y;
	for (ll i = k; i >= 0; i--)
    	x.push_back(X[i] - (ld)2 * s * t * i);
  	for (ll i = k; i < n; i++)
    	y.push_back(X[i] - (ld)2 * s * t * i);
  	if (!make(x, y)) 
		return 0;
  	reverse(x.begin(), x.end());
  	reverse(y.begin(), y.end());
  	if (!make(x, y))
		return 0;
	return 1;
}
 
int main() 
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n >> k >> t;
	k--;
	for (ll i = 0; i < n; i++)
    cin >> X[i];
  	int L = 0, R = infint;
  	while (L < R)
  	{
		ll mid = (L + R) >> 1;
    	if (check(mid))
      		R = mid;
    	else
      		L = mid + 1;
    }
	cout << L;
}
