Cod sursa(job #765493)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 iulie 2012 22:39:08
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>
int n,a[3000001],i,k,j,t;

int A(int p,int r)
{int i=p-1,j,x=a[r],m;
for(j=p;j<r;j++)
if(a[j]<=x)
      {i++;
      if(i!=j&&a[i]!=a[j])
            m=a[i],a[i]=a[j],a[j]=m;}
if(i+1!=r&&a[i+1]!=a[r])
      m=a[i+1],a[i+1]=a[r],a[r]=m;
return i+1;}

int B(int p,int r)
{int m;
if((p+r)%2==0)
      m=a[r],a[r]=a[p],a[p]=m;
return A(p,r);}

int C(int p,int r,int i)
{int q,k;
if(p==r)
      return a[p];
q=B(p,r),k=q-p+1;
if(i==k)
      return a[q];
else
      if(i<k)
             return C(p,q-1,i);
      else
             return C(q+1,r,i-k);}
             
int main()
{freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d%d%d",&n,&k,&a[1]);
for(i=2;i<=n;i++)
      {scanf("%d",&a[i]);
      if(a[i-1]<a[i])
             j++;
      else
             t++;}
if(j==n-1)
      printf("%d",a[k]);
else
      if(t==n-1)
             printf("%d",a[n-k+1]);
      else
             printf("%d",C(1,n,k));
return 0;}