Cod sursa(job #2540434)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 7 februarie 2020 10:07:43
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#include <time.h>
using namespace std;
ofstream fout("sdo.out");
ifstream fin("sdo.in");
int i,n,k,v[3000010];
int poz(int st,int dr) {
    int dst=0, ddr=-1;
    int x=st+rand()%(dr-st+1);
    swap(v[x],v[st]);
    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];
    int 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;
}