akashtadwai

Untitled

Nov 10th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef std::pair<int, int> ipair;
  4. #define int long long
  5. #define pb push_back
  6. #define ff first
  7. #define ss second
  8. #define fr(i, j, k) for (int i = j; i < k; i++)
  9. #define cnt_ones(x) __builtin_popcount(x)
  10. #define all(x) x.begin(), x.end()
  11. #define mp make_pair
  12. #define mod 1000000007
  13. #define IOS                                                                    \
  14.   std::ios::sync_with_stdio(false);                                            \
  15.   cin.tie(NULL);                                                               \
  16.   cout.tie(NULL);
  17.  
  18. int findSmallestRange(vector<vector<int>>b,int k) {
  19.   int i, minval, maxval, minrange, minel, maxel, flag, minind;
  20.     int ptr[k+1];
  21.   // initializing to 0 index;
  22.   for (i = 0; i <= k; i++)
  23.     ptr[i] = 0;
  24.  
  25.   minrange = INT_MAX;
  26.  
  27.   while (1) {
  28.     // for mainting the index of list containing the minimum element
  29.     minind = -1;
  30.     minval = INT_MAX;
  31.     maxval = INT_MIN;
  32.     flag = 0;
  33.  
  34.     // iterating over all the list
  35.     for (i = 0; i < k; i++) {
  36.       // if every element of list[i] is traversed then break the loop
  37.       if (ptr[i] == b[i].size()) {
  38.         flag = 1;
  39.         break;
  40.       }
  41.       // find minimum value among all the list elements pointing by the ptr[]
  42.       // array
  43.       if (ptr[i] < b[i].size() && b[i][ptr[i]] < minval) {
  44.         minind = i; // update the index of the list
  45.         minval = b[i][ptr[i]];
  46.       }
  47.       // find maximum value among all the list elements pointing by the ptr[]
  48.       // array
  49.       if (ptr[i] < b[i].size() && b[i][ptr[i]] > maxval) {
  50.         maxval = b[i][ptr[i]];
  51.       }
  52.     }
  53.  
  54.     // if any list exhaust we will not get any better answer ,so break the while
  55.     // loop
  56.     if (flag)
  57.       break;
  58.  
  59.     ptr[minind]++;
  60.  
  61.     // updating the minrange
  62.     if ((maxval - minval) < minrange) {
  63.       minel = minval;
  64.       maxel = maxval;
  65.       minrange = maxel - minel;
  66.     }
  67.   }
  68.  
  69.   return minrange;
  70. }
  71. void init() {
  72.   int T;
  73.   cin >> T;
  74.   while (T--) {
  75.     int N,M;
  76.     cin>>N>>M;
  77.     vector<vector<int>>b(M);
  78.     vector<int>a(N);
  79.     for(int i=0;i<N;i++)    cin>>a[i];
  80.     for(int i=0;i<N;i++)
  81.         b[i%M].pb(a[i]);
  82.     for(int i=0;i<M;i++){
  83.         sort(b[i].begin(),b[i].end());
  84.     }
  85.     int res=findSmallestRange(b,M);
  86.     cout<<res<<endl;
  87.   }
  88. }
  89. int32_t main() {
  90.   IOS;
  91.   init();
  92.   return 0;
  93. }
Add Comment
Please, Sign In to add comment