题解(qoj)https://qoj.ac/download.php?type=attachments&id=1784&r=1
补题:https://codeforces.com/gym/105471
过的先不写。。
I
这题分为相对独立的两个部分,找到有效的三元组,以及求解二维数点最大值问题。
- 考虑枚举答案,发现这样的三元组最多有O(nd)个,容易想到二分的做法来找到所有三元组,但是复杂度无法通过,我这边想的是通过一个类似单调栈的结构来做,对于每个i枚举因数x,记录对应的lst[x],对于每个x开一个vector
vt, 存三元组的起始ii以及终点的可行位置ii*2-jj,如果有一个起点大,终点小的位置,显然能把之前的pop出去,但是我们其实希望按照终点位置排序,如果不按照终点位置排序的话那就会访问到很多不可行的位置复杂度就不对了。