Cod sursa(job #2184264)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 23 martie 2018 21:27:52
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <stdlib.h>
#include <ctime>
using namespace std;

ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int n,i,k,p,v[3000010];
int poz (int st,int dr){
    int x = st + rand()%(dr-st+1);
    swap (v[st],v[x]);
    int dst = 0;
    int ddr = -1;
    while (st < dr){
        if (v[st] > v[dr]){
            swap (v[st],v[dr]);
            int aux = dst;
            dst = -ddr;
            ddr = -aux;
        }

        st += dst;
        dr += ddr;
    }
    return st;
}
int cauta (int st,int dr,int k){

    if (st == dr)
        return v[st];
    p = poz (st,dr);
    if (p == k)
        return v[k];
    if (p > k)
        return cauta (st,p-1,k);
    else
        return cauta (p+1,dr,k);

}

int main (){

    fin>>n>>k;
    for (i=1;i<=n;i++)
        fin>>v[i];
    srand (time(0));
    fout<<cauta (1,n,k);

    return 0;
}