#include <iostream>
#include <algorithm>
#include <deque>
using namespace std;
#define MAXN 1000001
int v[ MAXN + 1 ];
int n, a, b;
bool check( int val )
{
deque<int> dq;
dq.push_back( -1 );
int index = a - 1;
while( index < n && dq.empty( ) == false )
{
if( index - dq.front( ) >= a )
{
if( index - dq.front( ) <= b && v[ index ] - v[ dq.front( ) + 1 ] <= val )
{
dq.push_back( index );
index++;
}
else
{
dq.pop_front( );
}
}
else
{
index++;
}
}
if( dq.empty( ) == true )
{
return false;
}
return dq.back( ) == n - 1;
}
int bsearch( )
{
int left = 0, right = v[ n - 1 ] - v[ 0 ] + 1;
int answ = right;
while( left <= right )
{
int mid = ( left + right ) / 2;
if( check( mid ) == true )
{
answ = mid;
right = mid - 1;
}
else
{
left = mid + 1;
}
}
return answ;
}
int main()
{
cin >> n >> a >> b;
for( int i = 0; i < n; i++ )
{
cin >> v[ i ];
}
std::sort( v, v + n );
cout << bsearch( );
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... |