Advertisement
Guest User

Untitled

a guest
May 26th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. void
  7. find_subsequence(const vector<int> &vec)
  8. {
  9.  
  10. int maxIdx = 0, maxLen = 1;
  11. int dir = 0, pos = 0;
  12. for (int i = 0; i < vec.size(); ++i) {
  13. if (dir == 0) { // start of a new sequence
  14. if (i == vec.size() - 1)
  15. break;
  16. pos = i;
  17. if (vec[i] < vec[i + 1])
  18. dir = -1;
  19. else if (vec[i] == vec[i + 1])
  20. dir = 0;
  21. else dir = 1;
  22. } else if (dir == -1) {
  23. if (vec[i] > vec[i + 1])
  24. dir = 1;
  25. else { // end of the sequence
  26. if ((i - pos) > maxLen)
  27. {
  28. maxLen = i - pos;
  29. maxIdx = pos;
  30. }
  31. dir = 0;
  32. pos = --i; // on the iteration it will increase and start back at i
  33. }
  34. } else {
  35. if (vec[i] < vec[i + 1])
  36. dir = -1;
  37. else { // end of the sequence
  38. if ((i - pos) > maxLen)
  39. {
  40. maxLen = i - pos;
  41. maxIdx = pos;
  42. }
  43. dir = 0;
  44. pos = --i; // on the iteration it will increase and start back at i
  45. }
  46. }
  47. }
  48. for (int i = maxIdx, j = 0; j < maxLen; ++j, ++i) {
  49. cout << vec[i];
  50. if (j != maxLen - 1)
  51. cout << ", ";
  52. }
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement