题意

有\(n\)条线段,区间为\([l_i, r_i]\),每次询问\([x_i, y_i]\),问要被覆盖最少要用多少条线段。

思路

\(f[i][j]\)表示以\(i\)为左端点,用了\(2^j\)条线段,最远到哪里。

然后从大到小贪心即可,类似于倍增找LCA的过程。

代码

#include <bits/stdc++.h>
using namespace std; #define N 200010
#define M 500010
#define D 20
int n, q;
int l[N], r[N];
int f[M][D]; int work(int x, int y) {
int ans = 0;
for (int i = D - 1; i >= 0; --i) {
if (f[x][i] < y) {
x = f[x][i];
ans |= (1 << i);
}
}
x = f[x][0]; ++ans;
if (x < y) ans = -1;
return ans;
} int main() {
while (scanf("%d%d", &n, &q) != EOF) {
for (int i = 1; i <= n; ++i) {
scanf("%d%d", l + i, r + i);
++l[i], ++r[i];
}
memset(f, 0, sizeof f);
for (int i = 1; i <= n; ++i) {
f[l[i]][0] = max(f[l[i]][0], r[i]);
}
for (int i = 1; i < M; ++i) {
f[i][0] = max(f[i][0], max(i, f[i - 1][0]));
for (int j = 1; j < D; ++j) {
f[i][j] = max(f[i][j], max(f[i][j - 1], f[i - 1][j]));
}
} for (int j = 1; j < D; ++j) {
for (int i = 1; i < M; ++i) {
f[i][j] = max(f[i][j], f[f[i][j - 1]][j - 1]);
}
}
int x, y;
while (q--) {
scanf("%d%d", &x, &y);
++x, ++y;
printf("%d\n", work(x, y));
}
}
return 0;
}

最新文章

  1. [ASP.NET Core] Static File Middleware
  2. How can i use iptables save on centos 7?
  3. 字符串正则替换replace第二个参数是函数的问题
  4. 0002 Oracle账户相关的几个语句
  5. [LintCode] Coins in a Line II 一条线上的硬币之二
  6. 正则表达式匹配完整img标签php实现
  7. android里TextView加下划线的几种方式
  8. 正在连接...ORA-12541: TNS: 无监听程序
  9. Python文件处理之文件读取方式(二)
  10. Jquery:Jquery中的DOM操作&lt;二&gt;
  11. [DeeplearningAI笔记]改善深层神经网络_优化算法2.3_2.5_带修正偏差的指数加权平均
  12. Effective STL 为包含指针的关联容器指定比较类型
  13. Invalid tld file: &quot;/WEB-INF/tags/xxxt.tld&quot;, see JSP 2.2 specification section 7.3.1 for more details
  14. 2017-9-24模拟赛T1 个人卫生综合征(school.*)
  15. 深度学习(一)——CNN算法流程
  16. java基础(5)内部类
  17. 慕学在线网0.3_四个model
  18. python第九十一天----第十六周作业
  19. java计算今天是今年的第几天
  20. linux write/wall 1

热门文章

  1. javascript移动端 电子书 翻页效果
  2. CentOS7.5 安装MySql教程
  3. hdu 6216 A Cubic number and A Cubic Number
  4. hdu 4745 two Rabits
  5. Docker启动Mongo报警告WARNING: /sys/kernel/mm/transparent_hugepage/enabled is &#39;always&#39;.
  6. Unable to open nested entry &#39;********.jar&#39; 问题解决
  7. Ubuntu安装rpm
  8. 从ABAP Netweaver的SICF到SAP Kyma的Lambda Function
  9. centos搭建集群
  10. SmartBinding实现DataSet与ListView的绑定及同步显示