fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <numeric>
  4. #include <vector>
  5. #include <tuple>
  6.  
  7. using namespace std;
  8.  
  9. void my_unique(const vector<unsigned>& table, vector<size_t>& index_table) {
  10. vector<size_t> temp = {index_table.front()}; //Mozna bez tego, ale chyba tak latwiej zrozumiec
  11. for(size_t i = 1; i < index_table.size(); ++i) {
  12. if(table[index_table[i]] != table[index_table[i-1]])
  13. temp.push_back(index_table[i]);
  14. }
  15. index_table = move(temp);
  16. }
  17.  
  18. int main() {
  19. vector<unsigned> table = {3, 3, 2, 3, 1, 1, 1, 1, 1};
  20. vector<size_t> index_table(table.size());
  21. iota(begin(index_table), end(index_table), 0);
  22. sort(begin(index_table), end(index_table), [&](size_t i, size_t j)
  23. {if(table[i] == table[j]) return i < j;
  24. return table[i] < table[j];});
  25. my_unique(table, index_table);
  26. unsigned least_index = table.size(), largest_gap = 0;
  27. tuple<size_t, size_t> answer(table.size(), table.size());
  28. for(const auto& x : index_table) {
  29. least_index = (least_index < x) ? least_index : x;
  30. if(least_index < x && largest_gap < x - least_index) {
  31. largest_gap = x - least_index;
  32. answer = make_tuple(least_index, x);
  33. }
  34. }
  35. if(answer == make_tuple(table.size(), table.size()))
  36. cout << "Brak.\n";
  37. else
  38. cout << get<0>(answer) << ' ' << get<1>(answer) << '\n';
  39. }
  40.  
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
Brak.