Pagini recente » Cod sursa (job #1059150) | Cod sursa (job #582942) | Cod sursa (job #414840) | Cod sursa (job #186214) | Cod sursa (job #1410307)
#include <fstream>
int n, i, k, v[3000001];
std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");
int quick_select(int* input, int p, int r, int k)
{
int m=p, n=r;
if (p==r) return input[p];
int pivot = input[n];
while ( m < n )
{
while ( input[m] < pivot )
m++;
while ( input[n] > pivot )
n--;
if ( input[m] == input[n] )
m++;
else if ( m < n ) {
int tmp = input[m];
input[m] = input[n];
input[n] = tmp;
}
}
int j=n;
int length = j - p + 1;
if ( length == k ) return input[j];
else if ( k < length ) return quick_select(input, p, j - 1, k);
else return quick_select(input, j + 1, r, k - length);
}
int main()
{
fin>>n>>k;
for (i=1;i<=n;i++)
{
fin>>v[i];
}
fout<<quick_select(v, 1, n, k);
return 0;
}