Pagini recente » Cod sursa (job #731439) | Cod sursa (job #435073) | Cod sursa (job #1910850) | Cod sursa (job #229975) | Cod sursa (job #1941211)
#include <iostream>
#include <fstream>
#define maxN 3000003
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,v[maxN];
int pivot(int left, int right)
{
int pos1=left, pos2=right, x=v[(left+right)/2];
while (pos1<pos2)
{
while (pos1<=right && v[pos1]<x) ++pos1;
while (pos2>=left && v[pos2]>=x) --pos2;
if (pos1<pos2) swap(v[pos1],v[pos2]);
}
for (int i=left; i<=right; ++i)
if (v[i]==x) return i;
}
void quickSelect(int left, int right, int k)
{
if (left==right) return;
int x=pivot(left,right);
int nr=x-left+1;
if (nr>=k) quickSelect(left,x,k);
else quickSelect(x+1,right,k-nr);
}
int main()
{
fin>>n>>k;
for (int i=1; i<=n; ++i)
fin>>v[i];
quickSelect(1,n,k);
fout<<v[k];
return 0;
}