Cod sursa(job #713636)

Utilizator ZexonAvramita Teodor Zexon Data 14 martie 2012 20:03:22
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
////#include <algorithm>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int n,k;
int v[3000001];
inline void schimb(int &x,int &y)
{
    int c;
    c=x;
    x=y;
    y=c;
}
int partitie(int st, int dr)
{
    int p=rand()%(dr-st+1) + st;
    int i;
    int j;
    schimb(v[p],v[dr]);
    for(i=j=st;i<dr;i++)
        if(v[i]<v[dr])
            schimb(v[i],v[j++]);
    schimb(v[j],v[dr]);
    return j;
}

int sort(int st,int dr,int poz)
{
    if(st>=dr) return -1;
    int p= partitie(st,dr);
    if (p==poz) return v[p];
    if  (poz<p) return sort(st,p-1,poz);
    else return sort(p+1,dr,poz);
}

int main()
{
    string tmp;
    in>>tmp;
    n=atoi(tmp.c_str());
    in>>tmp;
    k=atoi(tmp.c_str());
    for(int i=1;i<=n;i++)
    {
        in>>tmp;
        v[i]=atoi(tmp.c_str());
    }

    out<<sort(1,n,k);
    return 0;
}