Pagini recente » Istoria paginii runda/mmmmmmmm-2 | Cod sursa (job #1429890) | Cod sursa (job #2272087) | Monitorul de evaluare | Cod sursa (job #1194944)
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#define N 3000010
using namespace std;
int n,k,i,a[N];
void SDO(int,int);
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
srand(time(NULL));
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
SDO(1,n);
return 0;
}
void SDO(int L,int R)
{
if(L==R){printf("%d",a[L]);return;}
int LL=L,RR=R,V,aux;
aux=(rand()<<27)|rand();
aux=L+aux%(R-L+1);
V=a[aux];
do
{
while(a[LL]<V)LL++;
while(a[RR]>V)RR--;
if(LL<=RR){aux=a[LL];a[LL]=a[RR];a[RR]=aux;LL++;RR--;}
}while(LL<=RR);
if(LL>R||RR<L){SDO(L,R);return;}
if(k<=RR)SDO(L,RR);
else SDO(LL,R);
}