摘要:
传送门 把线段都读进来然后排序,先按右端点为第一关键字从小到大排序,后按左端点为第二关键字从小到大排序。 注意不能先按左端点后按右端点排序,否则会出现大包小的情况,如下: —————— ——— — 然后直接线段树搞就行,先求区间最小值,如果大于零就更新统一减1。 ——代码 1 #include <c 阅读全文
摘要:
传送门 设 f[i] 表示吃完 f[i] 及其以下的能量球后所剩下的能量。 所以 f[i] = max(f[i], f[j] + (sum[i] - sum[j]) - i * 100) ( 0 <= j < i ) 但这是 O(n2) 的,肯定超时, 把上面的式子变换以下得到 f[i] = max 阅读全文
摘要:
传送门 1.先弄个单调队列求出每一行的区间为n的最大值最小值。 2.然后再搞个单调队列求1所求出的结果的区间为n的最大值最小值 3.最后扫一遍就行 懒得画图,自己体会吧。 ——代码 1 #include <cstdio> 2 #include <iostream> 3 4 using namespa 阅读全文
摘要:
传送门 首先考虑暴力做法,可以先求一遍前缀和 sum,然后ans = max(ans, sum[i] - sum[k]) (i - q <= k <= i - p) 但这个肯定会超时。 仔细看这个公式,sum[i] 不变,只用求最小 sum[k] 就行,所以可以用单调队列维护这个区间的最小 sum[ 阅读全文