Pagini recente » Cod sursa (job #1283801) | Cod sursa (job #1313965) | Cod sursa (job #1530982) | Cod sursa (job #1313973) | Cod sursa (job #1308955)
#include <stdio.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
int v[3000003],n,k,gasit;
void dvd(int st,int dr,int &m)
{
int i, pm=st, is=st, id;
for(i=st; i<=dr; i++)
if(v[i]<v[m])
pm++;
id=pm;
v[m]=v[m]^v[pm]^(v[pm]=v[m]);
while((is<pm)&&(id<dr))
{
while(v[pm]>v[is])is++;
while(v[pm]<=v[id])id++;
v[id]=v[id]^v[is]^(v[is]=v[id]);
id++;
is++;
}
m=pm;
}
void quick(int st,int dr)
{
int m=rand()%(dr-st+1)+st;
if((st<dr)&&(!gasit))
{
dvd(st,dr,m);
if(m>=k)
quick(st,m);
else
quick(m+1,dr);
}
else
gasit=v[k];
}
int main()
{
FILE *f,*g;
int i;
f=fopen("sdo.in","r");
fscanf(f,"%d %d",&n,&k);
for(i=1; i<=n; i++)
fscanf(f,"%d", &v[i]);
fclose(f);
gasit=0;
quick(1,n);
g=fopen("sdo.out","w");
fprintf(g,"%d",gasit);
fclose(g);
return 0;
}