Pagini recente » Cod sursa (job #2305463) | Cod sursa (job #553777) | Cod sursa (job #2280110) | Cod sursa (job #1241960) | Cod sursa (job #2343770)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
unsigned int n,k,indicecaut;
unsigned int A[4000002];
unsigned int Qselect(unsigned int p,unsigned int q);
unsigned int Divide(unsigned int p,unsigned int q);
int main()
{
fin>>n>>indicecaut;
for (k=1;k<=n;k++)
fin>>A[k];
fout<<Qselect(1,n);
return 0;
}
unsigned int Qselect(unsigned int p,unsigned int q)
{
unsigned int m;
m=Divide(p,q);
if (m==indicecaut)
return A[m];
else if (m>indicecaut)
Qselect(p,m-1);
else if (m<indicecaut)
Qselect(m+1,q);
}
unsigned int Divide(unsigned int p,unsigned int q)
{
unsigned int st,dr,x,pivot;
st=p;
dr=q;
pivot=p+rand()%(q-p+1);
x=A[pivot];
swap(A[st],A[pivot]);
while (st<dr)
{
while (st<dr&&A[dr]>=x)
dr--;
A[st]=A[dr];
while (st<dr&&A[st]<=x)
st++;
A[dr]=A[st];
}
A[st]=x;
return st;
}