Cod sursa(job #1238216)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 5 octombrie 2014 23:03:58
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <time.h>
#include <stdlib.h>

using namespace std;

ifstream fin ("sdo.in");
ofstream fout ("sdo.out");

int v[3000010],l[3000010],r[3000010];

int st,dr,mid,k,n,i;

int sdo (int x, int y) {
    int poz=x+rand()%(dr-st+1);
    int st=0;
    int dr=0;
    for (int i=x;i<=y;i++) {
        if (v[i]<=v[poz])
            l[++st]=i;
        else
            r[++dr]=i;
    }
    for (int i=x;i<=y;i++) {
        if (i<=st)
            v[i]=v[l[i]];
        else
            v[i]=v[r[i-st]];
    }
    return st;
}


int main () {

    srand(time(0));

    fin>>n>>k;
    for (i=1;i<=n;i++)
        fin>>v[i];
    st=1;dr=n;
    while (st<=dr) {
        mid=sdo(st,dr);
        if (mid==k) {
            fout<<v[mid]<<"\n";
            return 0;
        }
        if (mid>k)
            dr=mid-1;
        else
            st=mid+1;
    }

    return 0;
}