Pagini recente » Cod sursa (job #762335) | Cod sursa (job #1066791) | Cod sursa (job #601367) | Cod sursa (job #468207) | Cod sursa (job #612676)
Cod sursa(job #612676)
#include<stdio.h>
#include<fstream>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
using namespace std;
#define MaxN 3000010
int A[MaxN];
int N,K;
void citire(void)
{
ifstream f ("sdo.in");
f >> N >> K;
for(int i=1;i<=N;i++)
f >> A[i];
}
int part(int li,int ls)
{
int a = rand()%(ls-li+1);
int c = A[li+a];
A[li+a] = A[li];
A[li] = c;
int i=li,j=ls,i1 = 1,j1 = 0;
for(;i < j;i += i1,j += j1)
if(A[i] > A[j])
{
c = A[i];
A[i] = A[j];
A[j] = c;
c = -i1;
i1 = -j1;
j1 = c;
}
return j;
}
int SDO(int li,int ls,int i)
{
int k;
k = part(li,ls);
if(i == k)
return A[k];
if(i <= k)
return SDO(li, k-1, i);
else
return SDO(k,ls,i);
}
int main()
{
FILE *g = fopen("sdo.out","w");
citire();
srand(time(NULL));
fprintf(g,"%d ",SDO(1,N,K));
fclose(g);
return 0;
}