Cod sursa(job #1773982)

Utilizator refugiatBoni Daniel Stefan refugiat Data 8 octombrie 2016 14:00:08
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream si("sdo.in");
ofstream so("sdo.out");
int v[3000005];
int sortare(int st,int dr)
{
    int piv=v[(st+dr)>>1];
    int i=st-1,j=dr+1,aux;
    while(1)
    {
        i++;
        while(piv>v[i])
            ++i;
        j--;
        while(piv<v[j])
            --j;
        if(i<j)
        {
            aux=v[i];
            v[i]=v[j];
            v[j]=aux;
        }
        else
            return j;
    }
}
int main()
{
    int n,k;
    si>>n>>k;
    int i;
    for(i=1;i<=n;++i)
        si>>v[i];
    int st=1,s,dr=n,t,r=k;
    while(st<dr)
    {
        s=sortare(st,dr);
        t=s-st+1;
        if(t>=r)
        {
            dr=s;
        }
        else
        {
            st=s+1;
            r-=t;
        }
    }
    so<<v[k];
    return 0;
}