求一个全排列,并且$a[i]\leq ans[i]\leq b[i]$。 保证有解,判断是否存在多组解,输出两组。
考虑生成一组解。考虑一定存在,那么贪心的考虑 对于$a[i]\leq x$,选择比较小的的$b[i]\geq x$,因为之后大的选择权利之后大,优先把选择权利小的让出去。(因为有解这个$b[i]$一定存在)。用一个$set$维护就很方便。
$p_i$表示$i$出现的位置。 现在枚举每个位置,假设$j$位置可以交换,$a[i]\leq ans[j]\leq b[i]$,$a[j]\leq ans[i]\leq b[j]$。假设$ans[j]>ans[i]\rightarrow a[j]\leq ans[i]<ans[j]\leq b[i]$。
也就是查询$min(ans[i],b[i])\leq ans[i]$ ,线段树解决。
代码
1 |
|