Cod sursa(job #1472450)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 17 august 2015 07:19:35
Problema Statistici de ordine Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.68 kb
#include<stdio.h>
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]);
      	if(a[i-1]<a[i])
            j++;
      	else
            t++;
	}
	printf("%d",j==n-1?a[k]:(t==n-1?a[n-k+1]:C(1,n,k)));
}