vadimk772336

Untitled

Sep 23rd, 2021 (edited)
830
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int partition(long long int* array, int* ind_array, int l, int r)
  4. {
  5.     int i, j, tmp, tmp_ind, pivot;
  6.     pivot = array[(l + r) / 2];
  7.     tmp = 0;
  8.  
  9.     while (true) {
  10.         while (array[l] < pivot)
  11.             l += 1;
  12.         while (array[r] > pivot)
  13.             r -= 1;
  14.  
  15.         if (l >= r)
  16.             return r;
  17.  
  18.         tmp_ind = ind_array[l];
  19.         ind_array[l] = ind_array[r];
  20.         ind_array[r] = tmp_ind;
  21.  
  22.         tmp = array[l];
  23.         array[l] = array[r];
  24.         array[r] = tmp;
  25.         l += 1;
  26.         r -= 1;
  27.     }
  28. }
  29.  
  30. void quickSort(long long int* array, int* ind_array, int l, int r)
  31. {
  32.     if (l < r) {
  33.         int q = partition(array, ind_array, l, r);
  34.         quickSort(array, ind_array, l, q);
  35.         quickSort(array, ind_array, q + 1, r);
  36.     }
  37. }
  38.  
  39. int main()
  40. {
  41.     int n, R, L;
  42.     long long int max_sum, min_sum, curr_sum;
  43.     int res_L, res_R;
  44.     std::cin >> n;
  45.     long long int a[n];
  46.     int ind_array[n];
  47.  
  48.     for (int i = 0; i < n; ++i) {
  49.         std::cin >> a[i];
  50.         ind_array[i] = i + 1;
  51.     }
  52.  
  53.     quickSort(a, ind_array, 0, n - 1);
  54.  
  55.     R = 0;
  56.     max_sum = a[0];
  57.     curr_sum = a[0];
  58.  
  59.     for (L = 0; L < n; ++L) {
  60.  
  61.         if (L == (n - 1)) {
  62.             min_sum = a[L];
  63.         }
  64.         else
  65.             min_sum = a[L] + a[L + 1];
  66.  
  67.         while ((R < (n - 1)) && (a[R + 1] <= min_sum)) {
  68.             R += 1;
  69.             curr_sum += a[R];
  70.         }
  71.  
  72.         if (curr_sum > max_sum) {
  73.             max_sum = curr_sum;
  74.             res_L = L;
  75.             res_R = R;
  76.         }
  77.  
  78.         curr_sum -= a[L];
  79.     }
  80.  
  81.     int len = (res_R - res_L + 1);
  82.     for (int i = 0; i < len; ++i) {
  83.         a[i] = ind_array[res_L + i];
  84.     }
  85.  
  86.     quickSort(a, ind_array, 0, len - 1);
  87.  
  88.     std::cout << max_sum << std::endl;
  89.     for (int i = 0; i < len; ++i)
  90.         std::cout << a[i] << " ";
  91.  
  92.     return 0;
  93. }
  94.  
Advertisement
Add Comment
Please, Sign In to add comment