Pagini recente » Cod sursa (job #2030509) | Cod sursa (job #2161808) | Cod sursa (job #2086103) | Cod sursa (job #723651) | Cod sursa (job #1522361)
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
int n,k,a[3000010];
void Citire()
{
freopen("sdo.in","r",stdin);
int i;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
}
void Aux(int &x,int &y)
{
int aux;
aux=x;
x=y;
y=aux;
}
int Partitionare(int x[],int st, int dr)
{
int p,piv,i,j;
p=rand()% (dr-st+1) +st;
Aux(x[st],x[p]);
piv=x[st],i=st+1;j=dr;
while(i<=j)
{
if(x[i]<=piv) i++;
if(x[j]>piv) j--;
if((i<j) &&(x[i]>piv) && (piv>=x[j]))
{
Aux(x[i],x[j]);
i++;j--;
}
}
x[st]=x[i-1];
x[i-1]=piv;
return i-1;
}
int Kthelement(int st,int dr,int k)
{
int p;
p=Partitionare(a,st,dr);
if(p==k) return a[k];
else if(p<k) return Kthelement(p+1,dr,k);
return Kthelement(st,p-1,k);
}
int main()
{
Citire();
freopen("sdo.out","w",stdout);
printf("%d",Kthelement(1,n,k));
return 0;
}