Pagini recente » Cod sursa (job #1977023) | Cod sursa (job #2734778) | Cod sursa (job #1630022) | Cod sursa (job #250511) | Cod sursa (job #1843003)
#include <iostream>
#include <algorithm>
#include <queue>
#define x first
#define y second
using namespace std;
pair < int , pair < long long , int > > v[300100];
priority_queue < pair < long long , int > > q;
long long i,n,k,rspp[300100],cs,cd,mij,rspfin,a;
int caut()
{
while( q.size() )
q.pop();
int nr = 0;
int rsp = 0;
for( int i = 1 ; i <= n ; i++ )
v[ i ].y.x -= mij - 1;
for( i = 1 ; i <= n && nr + n - i + 1 >= k ; i++ )
{
if( v[ i ].y.x < v[ i ].x )
continue;
q.push( make_pair( -v[ i ].y.x , v[ i ].y.y ) );
nr++;
while( nr )
{
if( q.top().x * ( -1 ) < v[ i ].x )
q.pop(),nr--;
else
break;
}
if( nr >= k )
{
rsp = 1;
for( int i = 1 ; i <= k ; i++ )
{
rspp[ i ] = q.top().y;
q.pop();
}
break;
}
}
for( int i = 1 ; i <= n ; i++ )
v[ i ].y.x += mij - 1;
return rsp;
}
int main()
{
cin>>n>>k;
for( i = 1 ; i <= n ; i++ )
cin>>v[ i ].x>>v[ i ].y.x, v[ i ].y.y = i;
sort( v + 1 , v + n + 1 );
cs = 1;
cd = 2000000001;
while( cs <= cd )
{
mij = ( cs + cd ) >> 1;
a = caut();
if( a )
{
cs = mij + 1;
rspfin = cs - 1;
}
else
cd = mij - 1;
}
cout<<rspfin<<'\n';
if( rspfin )
{
sort( rspp + 1 , rspp + k + 1 );
for( i = 1 ; i <= k ; i++ )
cout<<rspp[ i ]<<" ";
}
else
for( i = 1 ; i <= k ; i++ )
cout<<i<<" ";
}