Cod sursa(job #1020036)

Utilizator NCodeMihai X NCode Data 1 noiembrie 2013 15:40:59
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<iostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;

int caut(const vector<unsigned> &m, unsigned st, unsigned dr, unsigned val) {
  if (dr == st + 1) {
    return dr;
  }

  int mid = (st + dr)/ 2;
  
  if (val <  m[mid]) {
    return caut(m, st, mid, val);
  }
  return caut(m, mid, dr, val);
  

}

int main()
{

  vector<unsigned> m;
  ifstream ifs;
  ofstream ofs;
  ifs.open("sdo.in");

  unsigned size, k;
  ifs >> size;
  ifs >> k;

  m = vector<unsigned>(k);

  unsigned i, elem;

  for (i = 0; i < k; ++i) {
    ifs >> elem;
    m[i]=(elem);
  }

  std::sort(m.begin(), m.end());

  for (; i < size; ++i) {
    ifs >> elem;
    if (elem > m[k - 1]) {
      continue;
    }

    m.pop_back();

    

    //adaugare

    if (elem<m.front()) {
      m.insert(m.begin(), elem);
      continue;
    }
    if (elem > m.back()){
      m.push_back(elem);
      continue;
    }
    int pos;
    pos = caut(m, 0, k - 2, elem);

    m.insert(m.begin()+pos, elem);
    
  }
  ifs.close();

  ofs.open("sdo.out");
  ofs << m[k-1];
  ofs.close();
}