10 分的小伙伴们看这里
查看原帖
10 分的小伙伴们看这里
578932
AlphaGuo楼主2022/11/10 19:56

看到其他帖子里说由于可能有重复的导致lowerbound离散化用不了只剩十分了,其实怎么离散化没有问题,问题在于本道题中需要用的离散化并不是将每个位置上的数替换成它的排名,而是要记录排名为i的数所在的位置,这样q[a[i]]=b[i]q[a[i]]=b[i]的逆序对数量才是答案。因为取到最值只需要aa中排名为kk的数在b中对应的数的排名也是k,如果用第一种离散化相当于强制要求两个数组中第ii个数的排名必须是ii,所以答案会算的更大


附上我lowerbound离散化代码

inline void work(int p[]){
	for(int i=1;i<=n;i++)tem1[i]=tem2[i]=p[i];
	sort(tem1+1,tem1+n+1);int l=unique(tem1+1,tem1+n+1)-tem1-1;
	for(int i=1;i<=n;i++)p[lower_bound(tem1+1,tem1+l+1,tem2[i])-tem1]=i;
}

其中p是待离散化的数组

2022/11/10 19:56
加载中...