Cod sursa(job #1238229)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 6 octombrie 2014 00:33:03
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <time.h>
#include <stdlib.h>
#include <algorithm>

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()%(y-x+1);
    int st=0;
    int dr=0;
    int p;
    for (int i=x;i<=y;i++) {
        if (v[i]<=v[poz]){
            l[++st]=v[i];
            if (v[i]==v[poz])
                p=st;
        }else
            r[++dr]=v[i];
    }
    swap(l[p],l[st]);
    for (int i=x,j=1;i<=y;i++,j++) {
        if (j<=st)
            v[i]=l[j];
        else
            v[i]=r[j-st];
    }

    return x+st-1;
}


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[k]<<"\n";
            return 0;
        }
        if (mid>k)
            dr=mid-1;
        else
            st=mid+1;
    }
    return 0;
}