#include <iostream>
using namespace std;
template <class T>
class DivideAndRule{
public:
void MergeSort(T *a,int low,int high)
{
if(low>=high) return ;
int mid=(low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
return ;
}
void Merge(T *a,int low,int mid,int high)
{
T *b=new T[high-low+1];
int temp=a[low];
int i=low,j=mid+1, k=0;
while(i<=mid&&j<=high)
{
if (a[i]<a[j])
b[k++]=a[i++];
else b[k++]=a[j++];
}
while(i<=mid) b[k++]=a[i++];
while(j<=high) b[k++]=a[j++];
for(i=low,k=0;i<=high;i++,k++)
{
a[i]=b[k];
}
delete b;
}
};