fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5.  
  6. int main(){
  7. int n, i, elems_to_pop;
  8. double med;
  9. std::vector<int> v;
  10.  
  11. n = i = 0;
  12. while(std::cin >> i){
  13. v.push_back(i);
  14. n++;
  15. }
  16. std::make_heap(v.begin(), v.end());
  17.  
  18. if(n & 0x1){ //n - нечетное
  19. elems_to_pop = (n - 1) / 2; //Сколько элементов снять с кучи, чтобы добраться до медианы
  20. while(elems_to_pop){
  21. std::pop_heap(v.begin(), v.end());
  22. v.pop_back();
  23. med = v.front();
  24. elems_to_pop--;
  25. }
  26. std::cout << med; //Медиана в случае нечетного n
  27. }else{ //n - четное
  28. elems_to_pop = (n / 2) - 1; //Сколько элементов снять с кучи перед расчетом медианы
  29. while(elems_to_pop){
  30. std::pop_heap(v.begin(), v.end());
  31. v.pop_back();
  32. med = v.front();
  33. elems_to_pop--;
  34. }
  35. std::cout << ((med + v.front()) / 2.0); //Медиана в случае четного n
  36. }
  37. }
Success #stdin #stdout 0s 3416KB
stdin
4
3
6
4
5
stdout
4