void merge_sort(int q[],int l,int r){
if(l>=r) return;
int mid=(l+r)>>1; // 位置中点
merge_sort(q,l,mid), merge_sort(q,mid+1,r);
int k=0, i=l, j=mid+1;
while(i<=mid && j<=r){
if(q[i]<=q[j]) tmp[++k]=q[i++];
else tmp[++k]=q[j++];
}
while(i<=mid) tmp[++k]=q[i++];
while(j<=r) tmp[++k]=q[j++];
for(i=l;i<=r;i++) q[i]=tmp[i-l+1];
}