Pagini recente » Cod sursa (job #2462231) | Cod sursa (job #16130) | Cod sursa (job #482772) | Cod sursa (job #1276186) | Cod sursa (job #1536512)
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
FILE *fin,*fout;
int n,k;
int a[3000010];
int ord(int st,int en,int piv,int lf)
{
//cout<<st<<" "<<en<<" "<<piv<<'\n';
if(st<en)
{
int p1=st-1,p2=en+1;
while(1)
{
do
{
p1++;
}while(a[p1]<a[piv]);
do
{
p2--;
}while(a[p2]>a[piv]);
if(p1<p2)
{
swap(a[p1],a[p2]);
}
else
{
break;
}
}
int x=p2-st+1;
//cout<<x<<'\n';
if(lf<=x)
{
ord(st,p2,(st+p2)/2,lf);
/*for(int i=1;i<=n;i++)
{
fprintf(fout,"%d ",a[i]);
}
fprintf(fout,"\n");*/
}
else
{
ord(p2+1,en,(p2+1+en)/2,lf-x);
/*for(int i=1;i<=n;i++)
{
fprintf(fout,"%d ",a[i]);
}
fprintf(fout,"\n");*/
}
}
}
int main()
{
fin=fopen("sdo.in","r");
fout=fopen("sdo.out","w");
fscanf(fin,"%d %d",&n,&k);
for(int i=1;i<=n;i++)
{
fscanf(fin,"%d",&a[i]);
}
int p1=0,p2=n+1;
int left=k;
ord(1,n,k,left);
fprintf(fout,"%d",a[k]);
}