Minimal Segment Cover
前言
最近需要把效率提起来, 注意写题不能太水, 要多自己想
思路
转化题意
给定
又是这一类线段题, 我们也是做过不少
不用想的太复杂, 我们先考虑一个贪心做法, 对于每一个点, 我们尽可能的往右边选择, 然后再跳到右边的位置之后继续贪心, 这样是
考虑优化, 容易发现我们可以优化跳的次数, 类似于倍增
代码
#include <bits/stdc++.h>
const int MAXN = 5e5 + 10;
int n, q, f[MAXN][25], k;
int main()
{
scanf("%d %d", &n, &q);
for (int i = 1; i <= n; i++)
{
int l, r;
scanf("%d %d", &l, &r);
f[l][0] = std::max(f[l][0], r);
k = max(k, r);
}
for (int i = 1; i <= k; i++)
f[i][0] = std::max(f[i][0], f[i - 1][0]);
for (int i = 1; i <= 20; i++)
for (int j = 0; j <= k; j++)
f[j][i] = f[f[j][i - 1]][i - 1];
while (q--)
{
int l, r, ans = 0;
scanf("%d %d", &l, &r);
for (int i = 20; i >= 0; i--)
if (f[l][i] < r)
{
ans += 1 << i;
l = f[l][i];
}
printf("%d\n", f[l][0] >= r ? ans + 1 : -1);
}
return 0;
}
总结
倍增优化一类跳跃问题
vivo 50
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」