fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void longestSubarray(int* A, int N, int X)
  5. {
  6. int maxLen = 0;
  7. int beginning = 0;
  8. map<int, int> window;
  9. int start = 0, end = 0;
  10. for (; end < N; end++) {
  11. window[A[end]]++;
  12. auto minimum = window.begin()->first;
  13. auto maximum = window.rbegin()->first;
  14. if (maximum - minimum <= X) {
  15. if (maxLen < end - start + 1) {
  16. maxLen = end - start + 1;
  17. beginning = start;
  18. }
  19. }
  20. else {
  21. while (start < end) {
  22. window[A[start]]--;
  23. if (window[A[start]] == 0) {
  24. window.erase(window.find(A[start]));
  25. }
  26. start++;
  27. auto minimum = window.begin()->first;
  28. auto maximum = window.rbegin()->first;
  29. if (maximum - minimum <= X)
  30. break;
  31. }
  32. }
  33. }
  34. for (int i = beginning; i < beginning + maxLen; i++)
  35. cout << A[i] << " ";
  36. }
  37. int main()
  38. {
  39. int size;
  40. cin >> size;
  41. int arr[size];
  42. while (size--)
  43. {
  44. for (int i=0; i < size; i++){
  45. int num;
  46. cin >> num;
  47. arr[i] = num;
  48. }
  49. }
  50. int n = sizeof(arr) / sizeof(arr[0]);
  51. longestSubarray(arr, n, 1);
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0.01s 5504KB
stdin
6
1 2 2 3 1 2
stdout
2 2 2 2 1