Advertisement
p2004a

MergeInLimitedSpace

May 12th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <tuple>
  4. #include <utility>
  5. #include <random>
  6.  
  7. using namespace std;
  8.  
  9. void merge(vector<int> &input, int s) {
  10.     vector<int> tmp;
  11.  
  12.     if (s < input.size() - s) {
  13.         tmp.resize(s);
  14.         move(input.begin(), input.begin() + s, tmp.begin());
  15.     } else {
  16.         tmp.resize(input.size() - s);
  17.         move(input.begin() + s, input.end(), tmp.begin());
  18.         move_backward(input.begin(), input.begin() + s, input.end());
  19.         s = input.size() - s;
  20.     }
  21.  
  22.     auto it1 = tmp.begin();
  23.     auto it2 = input.begin() + s;
  24.     for (auto it3 = input.begin(); it2 != input.end() || it1 != tmp.end(); ++it3) {
  25.         if (it1 != tmp.end() && (it2 == input.end() || *it1 <= *it2)) {
  26.             *it3 = *it1;
  27.             ++it1;
  28.         } else {
  29.             *it3 = *it2;
  30.             ++it2;
  31.         }
  32.     }
  33. }
  34.  
  35. void solve() {
  36.     int n;
  37.     cin >> n;
  38.  
  39.     random_device rd;
  40.     default_random_engine gen(rd());
  41.     uniform_int_distribution<> dist(1, n);
  42.     vector<int> input(n);
  43.     for (int & elem: input) {
  44.         elem = dist(gen);
  45.     }
  46.     int s = dist(gen);
  47.     sort(input.begin(), input.begin() + s);
  48.     sort(input.begin() + s, input.end());
  49.     auto print_input = [&]() {
  50.         for (int elem: input) {
  51.             cout << elem << " ";
  52.         }
  53.         cout << endl;
  54.     };
  55.     print_input();
  56.     merge(input, s);
  57.     print_input();
  58. }
  59.  
  60. int main() {
  61.     int z;
  62.     cin >> z;
  63.     while (z--) solve();
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement