本人代码:
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],e[100005],num[100005];
int vis1[100005],vis2[100005];
void merge(int l, int r) {
int p1=l,mid=(l+r)/2,p2=mid+1,p=l;
while(p1<=mid&&p2<=r){
if(c[p1]<=c[p2]){
d[p++]=c[p1++];
}else{
d[p++]=c[p2++];
}
}
while(p1<=mid){
d[p++]=c[p1++];
}
while(p2<=r){
d[p++]=c[p2++];
}
for(int i=l;i<=r;i++){
c[i]=d[i];
}
}
void merge_sort(int l, int r) {
if(l==r){
return;
}
int mid=(l+r)/2;
merge_sort(l,mid);
merge_sort(mid+1,r);
merge(l,r);
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d",&a[i],&b[i]);
c[i]=abs(a[i]-b[i]);
e[i]=c[i];
num[i]=i;
}
merge_sort(0,n-1);
for(int i=n-1;i>=0;i--){
for(int j=0;j<n;j++){
if(e[j]==c[i]){
if(!vis1[j]&&!vis2[i]){
num[i]=j;
vis1[j]=1;
vis2[i]=1;
}
}
}
}
for(int i=n-1;i>=0;i--){
printf("%d ",num[i]+1);
}
return 0;
}
TLE了,只有60分