Cod sursa(job #1482014)

Utilizator herbertoHerbert Mohanu herberto Data 5 septembrie 2015 19:54:02
Problema Statistici de ordine Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>
#include <stdlib.h>

int v[3000000];
int main(){
  FILE*fin=fopen("sdo.in", "r");
  FILE*fout=fopen("sdo.out", "w");
  int n, i, begin, end, aux, b, e, k, pivot;
  fscanf(fin, "%d%d", &n, &k);
  for(i=0; i<n; i++)
    fscanf(fin, "%d", &v[i]);

  k--;
  begin=0;
  end=n-1;
  while(begin<end){
    pivot=v[(begin+end)/2];
    b=begin;
    e=end;
    while(b<=e){
      while(v[b]<pivot)
        b++;
      while(v[e]>pivot)
        e--;

      if(b<=e){
        aux=v[b];
        v[b]=v[e];
        v[e]=aux;
        b++;
        e--;
      }
    }
    if(k<=e)
      end=e;
    else
      if(k>=b)
        begin=b;
      else
        begin=end=k;

  }
  fprintf(fout, "%d\n", v[k]);
  fclose(fin);
  fclose(fout);
  return 0;
}