Cod sursa(job #1534926)

Utilizator refugiatBoni Daniel Stefan refugiat Data 24 noiembrie 2015 08:17:24
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
//FILE* si=fopen("siruri2.in","r");
ifstream si("sdo.in");
ofstream so("sdo.out");
const int NMAX=3000005;
int v[NMAX];
inline void schimb(int &a,int &b)
{
    int aux=a;
    a=b;
    b=aux;
}
int srt(int st,int fin)
{
    int piv=v[(st+fin)>>1];
    int i=st-1,j=fin+1;
    while(1)
    {
        ++i;
        while(v[i]<piv)++i;
        --j;
        while(v[j]>piv)--j;
        if(i<j)schimb(v[i],v[j]);
        else return j;
    }
    return 0;
}
void rez(int st,int sf,int k)
{
    if(st==sf)
        return;
    int s=srt(st,sf);
    int t=s-st+1;
    if(t>=k)
        rez(st,s,k);
    else
        rez(s+1,sf,k-t);

}
int main()
{
    int n,k;
    si>>n>>k;
    int i;
    for(i=1;i<=n;++i)
        si>>v[i];
    rez(1,n,k);
    so<<v[k];
    so.close();
    return 0;
}