Cod sursa(job #2075951)

Utilizator trutruvasilicaHuhurez Marius trutruvasilica Data 25 noiembrie 2017 21:22:11
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int v[3000005];
int partitie(int left,int right,int pivot)
{
    int valPivot=v[pivot];
    int storeIndex=left;
    swap(v[pivot],v[right]);
    for(int i=left;i<right;i++)
    {
        if(v[i]<valPivot)
        {
            swap(v[i],v[storeIndex]);
            storeIndex++;
        }
    }
    swap(v[storeIndex],v[right]);
    return storeIndex;
}
int statistici(int left,int right,int k)
{
    while(left<right)
    {
        int pivot=left+int(rand()%(right-left+1));
        pivot=partitie(left,right,pivot);
        if(k==pivot) return v[k];
        else if(k<pivot) right=pivot-1;
        else left=pivot+1;
    }
    return v[left];
}
int main()
{
    int n,k;
    fin>>n>>k;
    for(int i=1;i<=n;i++) fin>>v[i];
    fout<<statistici(1,n,k);
}