#include <iostream>
#include <algorithm>
#include <deque>
using namespace std;
#define MAXN 500000
int v[ MAXN + 1 ];
int n, a, b;
//bool canbesplit( int sz, int a, int b )
//{
// int num = sz / a;
// int dif = sz % a;
//
// if( a == b && dif != 0 )
// {
// return false;
// }
// else if( a == b )
// {
// return true;
// }
// else
// {
// return ( b - a ) * num > dif;
// }
//}
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... |