Pagini recente » Cod sursa (job #1235915) | Cod sursa (job #2529939) | Cod sursa (job #1141273) | Cod sursa (job #1660087) | Cod sursa (job #1822390)
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<ctime>
#include<cstdio>
using namespace std;
ofstream g("sdo.out");
int const NMax = 3000005, Buffer_Size = 100000;
int V[NMax];
int n, k, pos;
char Buffer[Buffer_Size];
void read(int & nr)
{
nr = 0;
while(Buffer[pos] < '0' || Buffer[pos] > '9'){
pos++;
if(pos == Buffer_Size){
fread(Buffer, 1, Buffer_Size, stdin);
pos = 0;
}
}
while(Buffer[pos] >= '0' && Buffer[pos] <= '9'){
nr = nr*10 + Buffer[pos++] - '0';
if(pos == Buffer_Size){
fread(Buffer, 1, Buffer_Size, stdin);
pos = 0;
}
}
}
void Read()
{
freopen("sdo.in", "r", stdin);
fread(Buffer, 1, Buffer_Size, stdin);
read(n); read(k);
for(int i=1; i<=n; i++)
read(V[i]);
}
int Split(int left, int right, int pivot)
{
int i, smaller;
smaller = left;
swap(V[right], V[pivot]);
for(i = left; i < right; i++)
if(V[i] < V[right])
swap(V[i], V[smaller++]);
swap(V[right], V[smaller]);
return smaller;
}
void Solve()
{
int pivot, i, j, left, right, mid;
left = 1;
right = n;
srand (time(NULL));
while(true){
pivot = (rand() % (right - left + 1)) + left;
mid = Split(left, right, pivot);
if(mid == k)
break;
if(mid < k)
left = mid + 1;
else
right = mid - 1;
}
g<<V[k];
}
int main()
{
Read();
Solve();
return 0;
}