Cod sursa(job #1314713)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 12 ianuarie 2015 10:41:17
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <cstdlib>
#include <algorithm>

using namespace std;

int v[3000003];

int kth(int st, int dr, int k)
{
    if (st==dr)return v[st];
    int poz=st+rand()%(dr-st+1), pivot=v[poz],i=st,j=dr;
    while(i<=j)
    {
        while(v[i]<pivot)i++;
        while(v[j]>pivot)j--;
        if(i<=j)
            swap(v[i++],v[j--]);
    }
    if(j-st+1>=k)
        return kth(st,j,k);
    else
        return kth(j+1,dr,k-j+st-1);
}

int main()
{
    FILE *f,*g;
    int i,k,n;
    f=fopen("sdo.in","r");
    fscanf(f,"%d %d",&n,&k);
    for(i=1; i<=n; i++)
        fscanf(f,"%d", &v[i]);
    fclose(f);

    g=fopen("sdo.out","w");
    fprintf(g,"%d",kth(1,n,k));
    fclose(g);
    return 0;
}