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