Cod sursa(job #1255295)

Utilizator VladPanaitVlad Panait VladPanait Data 4 noiembrie 2014 17:34:57
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#define max 3000001
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int v[max], n, k;
int qsort(int v[max], int left, int right)
{
 int i, j, p, aux;
 i=left-1;
 j=right+1;
 p= v[i+ rand()%(j-i+1)];
 while(1)
 {
  do
 { 
  i++;}
  while(i<p);
  do
  {
  j--;}
  while(j>p);
  if (i<j)
  {
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
else return j;
}
return 0;
}

void sdo(int v[max], int left, int right, int k)
{
     if(left==right)
     return;
     int m,t;
     m=qsort(v, left, right);
     t=m-left+1;
     if(t<=k)
     sdo(v, left, m, k);
     else
     sdo(v, m+1, right, k-t);
     }

int main()
{
    int i;
    fin>>n>>k;
    for( i=0; i<n; ++i)
    fin>>v[i];
    sdo(v, 1, n, k);
    fout<<v[i]<<' ';
    return 0;
    }