Pagini recente » Cod sursa (job #2889828) | Cod sursa (job #88916) | Cod sursa (job #2570846) | Cod sursa (job #858866) | Cod sursa (job #659079)
Cod sursa(job #659079)
#include<stdio.h>
#include<cstdlib>
#define Nmax 3000002
using namespace std;
FILE *c,*d;
int a[Nmax],n,k;
void read()
{
int i;
fscanf(c,"%d %d",&n,&k);
for(i=1;i<=n;i++)
fscanf(c,"%d",&a[i]);
}
void swap(int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
int partitionize(int l,int r)
{
int i=l-1,j=r+1,value=a[l+rand()%(r-l+1)];
while(1)
{
do
i++;
while(a[i]<value&&i<n);
do
j--;
while(a[j]>value&&j>1);
if(i<j)
swap(a[i],a[j]);
else
return j;
}
}
void quick(int st,int dr,int x)
{
int t,q;
if(st<dr)
{
t=partitionize(st,dr);
q=t-st+1;
if(q>=x)
quick(st,t,x);
else
quick(t+1,dr,x-q);;
}
}
int main()
{
c=fopen("sdo.in","r");
d=fopen("sdo.out","w");
read();
quick(1,n,k);
fprintf(d,"%d",a[k]);
fclose(c);
fclose(d);
return 0;
}