void merge(vector<int>& v, int s, int mid, int e)
{
int i = mid + 1;
int j = s;
vector<int> tmp;
while (s <= mid && i <= e)
{
if (v[s] <= v[i])
{
tmp.push_back(v[s]);
s++;
}
else if (v[s] > v[i])
{
tmp.push_back(v[i]);
i++;
}
}
while (s <= mid)
{
tmp.push_back(v[s]);
s++;
}
while (i <= e)
{
tmp.push_back(v[i]);
i++;
}
for (int it = 0; it < tmp.size(); it++)
{
v[j] = tmp[it];
j++;
}
return;
}
void mSort(vector<int>& v, int s, int e)
{
if (s >= e)
return;
int mid = (s + e) / 2;
mSort(v, s, mid);
mSort(v, mid + 1, e);
merge(v, s, mid, e);
return;
}
void mSort(vector<int>& v, int n)
{
mSort(v, 0, n);
return;
}