Rt,请问第一种离散化时间复杂度是否要略高于第二种.他们之间选择哪个更合适?
第一种(从别处粘过来的,只是想表达这个思路):
std::sort(a + 1, a + 1 + n);
len = std::unique(a + 1, a + n + 1) - a - 1;
for(int i=1;i<=n;i++) a[i]=std::lower_bound(a + 1, a + len + 1, x) - a; // 查询 x 离散化后对应的编号
第二种:
struct node{
int date,i;
}b[N];
bool cmp(node aa,node bb){
if(aa.date==bb.date){
return aa.i<bb.i;
}
return aa.date<bb.date;
}
int n,a[N];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>b[i].date;
b[i].i=i;
}
sort(b+1,b+1+n,cmp);
int cnt=1;
for(int i=1;i<=n;i++){
if(b[i].date==b[i-1].date) cnt--;
a[b[i].i]=cnt;
cnt++;
}
for(int i=1;i<=n;i++){
cout<<a[i];
}
return 0;
}