wqs二分(带权二分)
目前最好的两篇文章:
dp 小计 wqs 二分 - g1ove - 博客园 (cnblogs.com)
【学习笔记】WQS二分详解及常见理解误区解释-CSDN博客
后面的用来理解基本做法,前面的用来解释问题。
关于用小数,答案是不用的。整数一定能切到 \(k\),只是没法表示出来。
设一个斜率 \(c\) 可以直接切到 \(k\) 和 \(k + 1\) 点(即两点连线的斜率),那么有 \(c = \frac{g(k + 1) - g(k)}{(k + 1) - k} = g(k + 1) - g(k)\) 其中 \(g(k)\) 和 \(g(k + 1)\) 一定都是整数,所以 \(g(k + 1) - g(k)\) 一定也是整数,所以 \(c\) 一定是一个整数。
因为这个斜率是直接切到 \(k\) 和 \(k + 1\) 点,所以整数一定可以切到 \(k\),但因为选取的顺序,所以可能最后返回的点不是 \(k\),而是 \(k + 1\),或者因为多点共线,导致表面上切不到 \(k\) 点,(即不返回 \(k\))。某些博客里面说的:切出来的直线的斜率 \(k\) 在一个范围 \([k_l,k_r]\) 内都是落在同一个 \(x\) 点上,应该就是表达的这种证明。
即使是共线,因为斜率还是那个斜率,可以切到 \(k\) (只是表面上不返回 \(k\)),所以正常求 \(g(x)\) 即可。但要注意,因为选取倾向不同,共线选到的点也不同,二分的倾向也就不同(即二分封左/右)。这句话比较抽象(应该没有博客能讲出来)。做做这题 P2619 [国家集训队] Tree I - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 勇敢一点,应该就能理解这句话。