Cod sursa(job #2306564)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 22 decembrie 2018 15:59:11
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include<cstdio>
int n,a[3000001],i,k,j,t;
int C(int p,int r,int i)
{
    int l=p-1,j;
    if(p==r)
        return a[p];
    if(!((p+r)&1))
        a[r]^=a[p]^=a[r]^=a[p];
    for(j=p;j<r;j++)
    	if(a[j]<=a[r])
		{
        	l++;
        	if(a[l]!=a[j])
            	a[l]^=a[j]^=a[l]^=a[j];
    	}
    if(l+1!=r&&a[l+1]!=a[r])
        a[l+1]^=a[r]^=a[l+1]^=a[r];
    return i==l-p+2?a[l+1]:(i<l-p+2?C(p,l,i):C(l+2,r,i-l+p-2));
}
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),a[i-1]<a[i]?j++:t++;
    printf("%d",j==n-1?a[k]:(t==n-1?a[n-k+1]:C(1,n,k)));
}