#include <iostream>
#include <algorithm>
using namespace std;
const int Nmax = 1e6 + 5;
int v[Nmax];
int n, a, b;
int lb(int x)
{
int st = 1, dr = n, mid, ans = 0;
while(st <= dr)
{
mid = (st + dr) / 2;
if(v[mid] <= x)
{
ans = mid;
st = mid + 1;
}
else
dr = mid - 1;
}
return ans;
}
bool ok(int dif)
{
int i, poz;
//cout << dif << ": " << '\n';
for(i = 1; i <= n; i ++)
{
poz = lb(v[i] + dif);
if(poz - i + 1 < a)
return false;
if(poz - i > b)
poz = i + b;
if(poz != n && n - poz < a)
poz = n - a;
if(poz - i + 1 < a)
return false;
//cout << i << " " << poz << '\n';
i = poz;
}
return true;
}
int main()
{
int i, st, dr, mid, ans = 0;
cin >> n >> a >> b;
for(i = 1; i <= n; i ++)
cin >> v[i];
sort(v + 1, v + n + 1);
st = 1; dr = v[n] - v[1];
while(st <= dr)
{
mid = (st + dr) / 2;//dif maxima
if(ok(mid))
{
ans = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |