Cod sursa(job #2857133)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 24 februarie 2022 22:11:04
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iostream>
#define nmax 3000001
using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");


int v[nmax];
int buf[nmax];

int sortSec(int a, int b)
{
    int piv= (rand()%(b-a))+a;
    int st=a,dr=b-1;
    for(int i=a;i<b;i++)
    {
        if(v[i]<v[piv])
        {
            buf[st]=v[i];
            st++;
        }
        if(v[i]>v[piv])
        {
            buf[dr]=v[i];
            dr--;
        }
    }
    buf[st]=v[piv];
    for(int i=a;i<b;i++)
    {
        v[i]=buf[i];
    }
    return st;
}


int main()
{

    srand(time(0));
    int n,k;
    f>>n>>k;
    k--;
    for(int i=0;i<n;i++)
    {
        f>>v[i];
    }
    int st=0,dr=n;
    while(st!=dr-1)
    {
        int mid=sortSec(st,dr);
        //cout<<st<<' '<<dr<<' '<<mid<<'\n';
        if(k<mid) dr=mid;
        else st=mid;

    }
    g<<v[st]<<'\n';
    return 0;
}