#include<bits/stdc++.h>
using namespace std;
void mergeSort(vector<int> &arr)
{
if (arr.size() > 1)
{
int mid = arr.size() / 2;
vector<int> L (arr.begin(), arr.begin() + mid);
vector<int> R (arr.begin() + mid, arr.end());
//for(auto x: L) cout<<x<<" ";
//cout<<"\n";
//for(auto x: R) cout<<x<<" ";
//cout<<"\n";
mergeSort(L);
mergeSort(R);
int i = 0, j = 0, k = 0;
while ( i < L.size() and j < R.size())
{
if (L[i] < R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
while (i < L.size())
{
arr[k] = L[i];
i++;
k++;
}
while (j < R.size())
{
arr[k] = R[j];
j++;
k++;
}
}
}
int main(){
vector<int> arr({12, 11, 13, 5, 6, 7});
//cout<<"Given array is : ";
//for(auto x: arr) cout<<x<<" ";
mergeSort(arr);
cout<<"\nSorted array is : ";
for(auto x: arr) cout<<x<<" ";
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIG1lcmdlU29ydCh2ZWN0b3I8aW50PiAmYXJyKQp7CglpZiAoYXJyLnNpemUoKSA+IDEpCgl7CgkJaW50IG1pZCA9IGFyci5zaXplKCkgLyAyOwoJCQoJCXZlY3RvcjxpbnQ+IEwgKGFyci5iZWdpbigpLCBhcnIuYmVnaW4oKSArIG1pZCk7CgkJdmVjdG9yPGludD4gUiAoYXJyLmJlZ2luKCkgKyBtaWQsIGFyci5lbmQoKSk7CgkJCgkJCgkJLy9mb3IoYXV0byB4OiBMKSBjb3V0PDx4PDwiICI7CgkJLy9jb3V0PDwiXG4iOwoJCS8vZm9yKGF1dG8geDogUikgY291dDw8eDw8IiAiOwoJCS8vY291dDw8IlxuIjsKCQkKCQltZXJnZVNvcnQoTCk7CgkJbWVyZ2VTb3J0KFIpOwoJCQoJCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOwoJCQoJCXdoaWxlICggaSA8IEwuc2l6ZSgpIGFuZCBqIDwgUi5zaXplKCkpCgkJewoJCQlpZiAoTFtpXSA8IFJbal0pCgkJCXsKCQkJCWFycltrXSA9IExbaV07CgkJCQlpKys7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlhcnJba10gPSBSW2pdOwoJCQkJaisrOwoJCQl9CgkJCWsrKzsKCQl9CgkJCgkJd2hpbGUgKGkgPCBMLnNpemUoKSkKCQl7CgkJCWFycltrXSA9IExbaV07CgkJCWkrKzsKCQkJaysrOwoJCX0KCQl3aGlsZSAoaiA8IFIuc2l6ZSgpKQoJCXsKCQkJYXJyW2tdID0gUltqXTsKCQkJaisrOwoJCQlrKys7CgkJfQoJfQp9CgppbnQgbWFpbigpewoJdmVjdG9yPGludD4gYXJyKHsxMiwgMTEsIDEzLCA1LCA2LCA3fSk7CgkvL2NvdXQ8PCJHaXZlbiBhcnJheSBpcyA6ICI7CgkvL2ZvcihhdXRvIHg6IGFycikgY291dDw8eDw8IiAiOwoJbWVyZ2VTb3J0KGFycik7Cgljb3V0PDwiXG5Tb3J0ZWQgYXJyYXkgaXMgOiAiOwoJZm9yKGF1dG8geDogYXJyKSBjb3V0PDx4PDwiICI7Cn0=