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