Cod sursa(job #1731563)

Utilizator Lungu007Lungu Ionut Lungu007 Data 19 iulie 2016 11:44:19
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
#define NMAX 3000001
ifstream in("sdo.in");
ofstream out("sdo.out");

long ii,n,a[NMAX];

int part(int st,int dr)
{
   // int z = rand()%(dr-st+1) + st;

   // swap(a[z],a[dr]);

    int x = a[dr];
    int i = st-1;
    for(int j = st;j<dr;j++)
    {
        if(a[j]<=x)
        {
            i++;
            swap(a[j],a[i]);
        }
    }
    swap(a[dr],a[i+1]);
    return i+1;
}

int stat(int st,int dr,int i)
{
    if(dr>=st){
    if(st==dr) {return a[st];cout << 2;}

    int mij = part(st,dr);
    int k = mij-st+1;
   // cout << st << " " << dr << " " << mij << " " << k  << " " << a[mij]<< endl;
   //cout << a[mij] << "     ";
   // for(int i=st;i<=dr;i++) cout << a[i] << " "; cout << endl;
    if(k == i){ return a[mij+k-1];cout << 1;}

    if(i<k)
    {
        stat(st,mij-1,i);
    }
    else
    {
      //  cout << mij+1 << " " << dr << endl;
        stat(mij+1,dr,i-k);
    }
}
}

int main()
{
    srand(time(0));
    in >> n >> ii;
    for(int i=0;i<n;i++){ in >> a[i];}

    out << stat(0,n-1,ii);
//    for(int i=0;i<n;i++)
//    {
//        out << a[i] << " ";
//    }
    return 0;
}