Max_Leb

Untitled

May 31st, 2022
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. void merge(int s[], int left, int right)
  5. {
  6.     if (left == right)
  7.         return;
  8.     int middle = (right + left) / 2;
  9.     int i = left;
  10.     int j = middle + 1;
  11.     merge(s, left, middle);
  12.     merge(s, middle + 1, right);
  13.     int tmp[right - left + 1];
  14.     for (int tmpInd = left; tmpInd <= right; ++tmpInd)
  15.     {
  16.         if (i <= middle && (j > right || s[i] <= s[j]))
  17.         {
  18.             tmp[tmpInd - left] = s[i];
  19.             ++i;
  20.         }
  21.         else
  22.         {
  23.             tmp[tmpInd - left] = s[j];
  24.             ++j;
  25.         }
  26.     }
  27.     for (int tmpInd = left; tmpInd <= right; ++tmpInd)
  28.     {
  29.         s[tmpInd] = tmp[tmpInd - left];
  30.     }
  31. }
  32.  
  33. int abs(int a) {
  34.     if (a < 0)
  35.         return -a;
  36.     return a;
  37. }
  38.  
  39. int main() {
  40.     int N;
  41.     std::cin >> N;
  42.     int elements[N];
  43.     for (int i = 0; i < N; ++i) {
  44.         std::cin >> elements[i];
  45.     }
  46.     merge(elements, 0, N - 1);
  47.  
  48.     int result[N];
  49.     if (N % 2 == 0) {
  50.         int half = N / 2;
  51.         int index = 0;
  52.         for (int i = 0; i < half; ++i) {
  53.             result[index++] = elements[i];
  54.             result[index++] = elements[i + half];
  55.         }
  56.     } else {
  57.         int index = 0;
  58.         int half = N / 2;
  59.         if (elements[half + 1] - elements[half] < elements[half] - elements[half - 1]) {
  60.             result[index++] = elements[half];
  61.             for (int i = 0; i < half; ++i) {   // -- >
  62.                 result[index++] = elements[i];
  63.                 result[index++] = elements[i + half + 1];
  64.             }
  65.         } else {
  66.             result[index++] = elements[0];
  67.             for (int i = half + 1; i < N; ++i) {  // < --
  68.                 result[index++] = elements[i];
  69.                 result[index++] = elements[i - half];
  70.             }
  71.         }
  72.     }
  73.  
  74.     int res = 0;
  75.     for (int i = 2; i < N; ++i)
  76.         res += abs(result[i] - result[i -2]);
  77.     std::cout << res << std::endl;
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment