fork(2) download
  1. // Time limit exceeded. The limit is 3 sec.
  2.  
  3. #include <cstdint>
  4. #include <iostream>
  5. #include <unordered_map>
  6. #include <algorithm>
  7. #include <iterator>
  8. using namespace std;
  9.  
  10. int main();
  11.  
  12. typedef uint_fast32_t number;
  13. typedef uint_fast32_t sequencelength;
  14.  
  15. class lengthsbase
  16. {
  17. unordered_map<number,sequencelength> t;
  18. public:
  19. const sequencelength &operator[] (number);
  20.  
  21. class iterator;
  22. iterator find(number);
  23. } b;
  24.  
  25. class lengthsbase::iterator:
  26. public ::iterator<forward_iterator_tag, sequencelength const, void>
  27. {
  28. friend class lengthsbase;
  29.  
  30. lengthsbase &b;
  31. number i;
  32. iterator(lengthsbase&, number);
  33.  
  34. public:
  35. iterator &operator=(const iterator&);
  36. iterator &operator++();
  37. friend bool operator==(const iterator&, const iterator&);
  38.  
  39. const sequencelength &operator*() const;
  40. };
  41.  
  42. int main()
  43. {
  44. ios_base::sync_with_stdio(false);
  45.  
  46. number i, j;
  47. while(cin >> i >> j)
  48. cout << i << ' ' << j << ' '
  49. << *max_element(b.find(min(i,j)), ++b.find(max(i,j)))
  50. << '\n';
  51.  
  52. return 0;
  53. }
  54.  
  55. const sequencelength &lengthsbase::operator[] (number i)
  56. {
  57. if(!t.count(i))
  58. t.insert
  59. (make_pair(i, (i == 1 ? 1 : operator[](i%2 == 0 ? i/2 : 3*i+1) + 1)));
  60.  
  61. return t[i];
  62. }
  63.  
  64. lengthsbase::iterator lengthsbase::find(number i)
  65. {
  66. return iterator(*this, i);
  67. }
  68.  
  69. const sequencelength &lengthsbase::iterator::operator *() const
  70. {
  71. return b[i];
  72. }
  73.  
  74. lengthsbase::iterator::iterator(lengthsbase &b, const number i): b(b), i(i) {}
  75.  
  76. lengthsbase::iterator &lengthsbase::iterator::operator=
  77. (const lengthsbase::iterator &it)
  78. {
  79. b=it.b;
  80. i=it.i;
  81. return *this;
  82. }
  83.  
  84. lengthsbase::iterator &lengthsbase::iterator::operator ++()
  85. {
  86. ++i;
  87. return *this;
  88. }
  89.  
  90. bool operator ==
  91. (const lengthsbase::iterator &it, const lengthsbase::iterator &jt)
  92. {
  93. return &(it.b) == &(jt.b) && it.i == jt.i;
  94. }
  95.  
  96. bool operator !=
  97. (const lengthsbase::iterator &it, const lengthsbase::iterator &jt)
  98. {
  99. return !(it == jt);
  100. }
Success #stdin #stdout 0s 3404KB
stdin
1 10
100 200
201 210
900 1000
stdout
1 10 20
100 200 125
201 210 89
900 1000 174