Cod sursa(job #1035743)

Utilizator NitaMihaitavoidcube NitaMihaita Data 18 noiembrie 2013 19:44:02
Problema Statistici de ordine Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#include<ctime>
#include<cstdlib>
#define numaru 3000000
using namespace std;
int v[numaru+1],n,k;
void schimba(int &a,int &b)
{
    a=(a+b)-(b=a);
}
int F(int i,int j)
{
    int x,poz,copie_i,copie_j;
    while(true)
    {
        if(i==j)return v[i];
        copie_i=i; copie_j=j;
        poz=rand()%(j-i)+i+1;
        x=v[poz];
        while(i<j)
        {
            while(v[i]<x)++i;
            while(x<v[j])--j;
            if(i<j) schimba(v[i],v[j]);
        }
        if(k==j)return v[j];
        else if(k>j) { i=j+1;j=copie_j;}
        else { i=copie_i; j=j-1; }
    }
}
int main()
{
    srand(time(0));
    ifstream f("sdo.in");
    ofstream g("sdo.out");
    int i,r;
    f>>n>>k;
    for(i=1;i<=n;++i)
        f>>v[i];
    r=F(1,n);
    g<<r<<"\n";
    f.close();
    g.close();
    return 0;
}