#include <algorithm>
#include <iostream>
#include <iterator>
int array[20] = {1,4,7,8,10,2,3,6,8,11,1,2,7,8,9,3,4,9,10,13};
using namespace std;
void MergeSort(int *arr, int start1, int start2, int start3, int start4, int size)
{
std::inplace_merge(arr + start1, arr + start2, arr + start3);
std::inplace_merge(arr + start3, arr + start4, arr + size);
std::inplace_merge(array, array + start3, arr + size);
}
int main()
{
MergeSort(array, 0, 5, 10, 15, 20);
std::copy(array, array + 20, ostream_iterator<int>(cout, " "));
}
ICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAjaW5jbHVkZSA8aXRlcmF0b3I+CiAgICAKICAgIGludCBhcnJheVsyMF0gPSB7MSw0LDcsOCwxMCwyLDMsNiw4LDExLDEsMiw3LDgsOSwzLDQsOSwxMCwxM307CiAgICAKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICAKICAgIHZvaWQgTWVyZ2VTb3J0KGludCAqYXJyLCBpbnQgc3RhcnQxLCBpbnQgc3RhcnQyLCBpbnQgc3RhcnQzLCBpbnQgc3RhcnQ0LCBpbnQgc2l6ZSkKICAgIHsKICAgICAgIHN0ZDo6aW5wbGFjZV9tZXJnZShhcnIgKyBzdGFydDEsIGFyciArIHN0YXJ0MiwgYXJyICsgc3RhcnQzKTsKICAgICAgIHN0ZDo6aW5wbGFjZV9tZXJnZShhcnIgKyBzdGFydDMsIGFyciArIHN0YXJ0NCwgYXJyICsgc2l6ZSk7CiAgICAgICBzdGQ6OmlucGxhY2VfbWVyZ2UoYXJyYXksIGFycmF5ICsgc3RhcnQzLCBhcnIgKyBzaXplKTsKICAgIH0KCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICBNZXJnZVNvcnQoYXJyYXksIDAsIDUsIDEwLCAxNSwgMjApOwogICAgICAgc3RkOjpjb3B5KGFycmF5LCBhcnJheSArIDIwLCBvc3RyZWFtX2l0ZXJhdG9yPGludD4oY291dCwgIiAiKSk7CiAgICB9Cgo=