结构体
struct Data{
int x, id; //数据, 下标
bool operator < (const Data &a) const{
return x < a.x;
}
}d[N];
//按x排序
sort(d, d+N);
for(int i=0; i<N; ++i)
a[d[i].id] = i; //从小到大依次标号
时间复杂度O(NlogN) 空间复杂度O(N)
用于无重复数据
sort + lower_bound
lower_bound (a, a+N, X) − a +1 返回a中第一个大于等于X的位置
unique (a, a+1+n)−(a+1) − a,减首地址返回将aa数组去重后a的数组大小
for(int i=1;i<=N;i++){
scanf("%d",&a[i]);
f[i]=a[i];
}
sort(f+1,f+1+N);
int nn=unique(f+1,f+1+N)-(f+1);//去重
for(int i=1;i<=N;i++){
a[i]=lower_bound(f+1,f+1+nn,a[i])-f;
}
这样储存了从小到大排序后原来a中所有元素,
中就储存了按大小排序后,原本
大小的排名,
则返回原本
的值
更多新品,请查看Rye_Catcher