通过简单证明可知,任意两个数列的首项和第二项一定有一个不同(若首项相同,但公差不同,所以第二项不会相同),因此当 m1m\ne1 时只需先比较首项,若相等再比较第二项即可。当 m=1m=1 时首项相同按输入顺序排序即可。

注意 ai,0a_{i,0} 可以为负数,如果首项相等比较公差只有 70pts。

#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
struct node{
	int x,n;
}a[100005];
bool cmp(node a,node b){
	if(a.x==b.x){
	    if(m!=1){
		    return 1ll*a.x*a.n<1ll*b.x*b.n;
	    }else{
	        return a.n<b.n;
	    }
	}
	return a.x<b.x;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i].x;
		a[i].n=i;
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<a[i].n<<' ';
	}
	return 0;
}