Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- void merge(int s[], int left, int right)
- {
- if (left == right)
- return;
- int middle = (right + left) / 2;
- int i = left;
- int j = middle + 1;
- merge(s, left, middle);
- merge(s, middle + 1, right);
- int tmp[right - left + 1];
- for (int tmpInd = left; tmpInd <= right; ++tmpInd)
- {
- if (i <= middle && (j > right || s[i] <= s[j]))
- {
- tmp[tmpInd - left] = s[i];
- ++i;
- }
- else
- {
- tmp[tmpInd - left] = s[j];
- ++j;
- }
- }
- for (int tmpInd = left; tmpInd <= right; ++tmpInd)
- {
- s[tmpInd] = tmp[tmpInd - left];
- }
- }
- int abs(int a) {
- if (a < 0)
- return -a;
- return a;
- }
- int main() {
- int N;
- std::cin >> N;
- int elements[N];
- for (int i = 0; i < N; ++i) {
- std::cin >> elements[i];
- }
- merge(elements, 0, N - 1);
- int result[N];
- if (N % 2 == 0) {
- int half = N / 2;
- int index = 0;
- for (int i = 0; i < half; ++i) {
- result[index++] = elements[i];
- result[index++] = elements[i + half];
- }
- } else {
- int index = 0;
- int half = N / 2;
- if (elements[half + 1] - elements[half] < elements[half] - elements[half - 1]) {
- result[index++] = elements[half];
- for (int i = 0; i < half; ++i) { // -- >
- result[index++] = elements[i];
- result[index++] = elements[i + half + 1];
- }
- } else {
- result[index++] = elements[0];
- for (int i = half + 1; i < N; ++i) { // < --
- result[index++] = elements[i];
- result[index++] = elements[i - half];
- }
- }
- }
- int res = 0;
- for (int i = 2; i < N; ++i)
- res += abs(result[i] - result[i -2]);
- std::cout << res << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment