Cod sursa(job #1661458)

Utilizator bogdanpaunFMI Paun Bogdan Gabriel bogdanpaun Data 23 martie 2016 21:26:22
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,k;
    freopen("sdo.in" , "r" ,stdin);
    scanf("%d %d",&n,&k);
    int *v = new int[n+2];
    for(int i=1;i<=n;++i){
        scanf("%d ",&v[i]);
    }
    int old_k = k;
    int s=1,d=n;
    int x,y,z;
    int l,r;
    while(true){
        x= s + (rand()%(d-s+1));
        l = s-1; r = d+1;
        while(true){
            do{
                ++l;
            }while( v[l] < v[x] );
            do{
                --r;
            }while( v[r] > v[x] );
            if(l<r)
                swap( v[l] , v[r] );
            else break;
        }

        int t = r - s + 1;
        //if( t == k ) break;
         if(t >= k){
            d = t;
        }else{
            s = t+1;
            k-=t;
        }

        if( s == d ) break;

    }
    freopen("sdo.out" , "w" ,stdout);

    printf("%d",v[old_k]);
    return 0;
}