方法一: 排序, 去重, 二分查找.
- For(i,1,n)a[i]=b[i]=read();
- sort(a+1,a+n+1);
- m=unique(a+1,a+n+1)-a-1;
- For(i,1,n)b[i]=lower_bound(a+1,a+m+1,b[i])-a;
注意事项: 去重并不是把数组中的元素删去, 而是重复的部分元素在数组末尾.
方法二: 记录, 排序, 枚举放回.
- For(i,1,n)a[i].num=read(),a[i].uid=i;
- sort(a+1,a+n+1,cmp);
- For(i,1,n)b[a[i].uid]=i;
注意事项: 相同的数排名不同, 存在局限性.
离散化板子
来源: http://www.bubuko.com/infodetail-3219196.html