#include<vector>
using namespace std;
void merge(int arr[],int s,int e){
int mid = s + (e-s)/2;
int l1 = mid-s +1, l2 = e-mid ;
int arr1[l1],arr2[l2];
int k = s;
for(int i=0;i<l1;i++){
arr1[i] = arr[k++];
}
k = mid+1;
for(int i=0;i<l2;i++){
arr2[i] = arr[k++];
}
int i=0,j=0;
k=s;
while(i<l1 && j<l2){
if(arr1[i]>arr2[j]){
arr[k++] = arr2[j++];
}
else
arr[k++] = arr1[i++];
}
while(i<l1){
arr[k++] = arr1[i++];
}
while(j<l2){
arr[k++] = arr2[j++];
}
}
void sort(int arr[],int s,int e){
if(s>=e){
return;
}
int mid = s+ (e-s)/2;
//left sort
sort(arr,s,mid);
//right sort
sort(arr,mid+1,e);
merge(arr,s,e);
}
void merge(vector<int> arr[],int s,int e){
int mid = s + (e-s)/2;
int l1 = mid-s +1, l2 = e-mid ;
int *arr1=new int[l1],*arr2 = new int[l2];
int k = s;
for(int i=0;i<l1;i++){
arr1[i]=(arr[k++]);
}
k = mid+1;
for(int i=0;i<l2;i++){
arr2[i]=(arr[k++]);
}
int i=0,j=0;
k=s;
while(i<l1 && j<l2){
if(arr1[i]>arr2[j]){
arr[k++] = arr2[j++];
}
else
arr[k++] = arr1[i++];
}
while(i<l1){
arr[k++] = arr1[i++];
}
while(j<l2){
arr[k++] = arr2[j++];
}
}
void sort(vector<int> arr[],int s,int e){
if(s>=e){
return;
}
int mid = s+ (e-s)/2;
//left sort
sort(arr,s,mid);
//right sort
sort(arr,mid+1,e);
merge(arr,s,e);
}
void mergeSort(int arr[], int l, int r) {
sort(arr,l,r);
}