Cod sursa(job #2669913)

Utilizator YusyBossFares Yusuf YusyBoss Data 8 noiembrie 2020 14:07:13
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <iostream>
#include <algorithm>
#include <stdio.h>
#define NMAX 3000000

using namespace std;

int v[NMAX + 1];
int k;
FILE *fin, *fout;

int getnr() {
  int nr;
  char ch;

  ch = fgetc( fin );
  while (!(ch >= '0' && ch <= '9'))
    ch = fgetc( fin );

  nr = 0;
  while (ch >= '0' && ch <= '9') {
    nr = nr * 10 + ch - '0';
    ch = fgetc( fin );
  }
}

int f(int begin, int end) {
  int piv, b, e;
  b = begin; e = end; piv = v[(b + e) / 2];

  while (v[b] < piv) b++;
  while (v[e] > piv) e--;

  while (b < e) {
    swap(v[b], v[e]);

    do b++; while (v[b] < piv);
    do e--; while (v[e] > piv);
  }

  if (begin < e && k <= e)
    f(begin, e);
  else if (e + 1 < end)
    f(e + 1, end);
}

int main() {
  int n, i;

  fin = fopen("sdo.in", "r");
  fscanf(fin, "%d%d", &n, &k);
  for (i = 0; i < n; i++)
    fscanf(fin, "%d", &v[i]);
  fclose( fin );

  k--;
  f(0, n - 1);

  fout = fopen("sdo.out", "w");
  fprintf(fout, "%d", v[k]);
  fclose( fout );
  return 0;
}