Pagini recente » Cod sursa (job #2666750) | Cod sursa (job #3032360) | Cod sursa (job #2529313) | Cod sursa (job #1339955) | Cod sursa (job #2343767)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("statisticiordine.in");
ofstream fout("statisticiordine.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;
}