Pagini recente » Cod sursa (job #2257310) | Cod sursa (job #3143536) | Cod sursa (job #2551118) | Cod sursa (job #669141) | Cod sursa (job #2691981)
#include <fstream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int NMAX=3000010;
int n,k,v[NMAX];
void citire()
{
fin>>n>>k;
for (int i=0; i<n; i++)
fin>>v[i];
}
int partitionare(int st,int dr, int pivotIndex)
{
int pivotVal=v[pivotIndex];
int i=st-1,j=dr+1;
while (true){
do{
i++;
}while (v[i]<pivotVal);
do{
j--;
}while (v[j]>pivotVal);
if (i>=j)
return j;
swap(v[i],v[j]);
}
}
void quickSelect(int st,int dr,int k)
{
if (st==dr)
return;
int pivot=partitionare(st,dr,(st+dr)/2);
if (pivot==k)
return;
if (pivot<k)
quickSelect(pivot+1,dr,k);
quickSelect(st,pivot,k);
}
void afisare()
{
fout<<v[k-1]<<'\n';
}
int main()
{
citire();
fin.close();
quickSelect(0,n-1,k-1);
afisare();
fout.close();
return 0;
}