题目链接

题意

给出n条线段。m次询问,每次询问给出一个区间\([l,r]\)问最少需要多少条线段才能覆盖区间\([l,r]\)。

所有坐标\(\le 5\times 10^5\)。\(n,m\le 2\times 10^ 5\)

思路

其实是比较经典的线段覆盖问题。

\(f[i][j]\)表示从i开始走\(2^j\)条线段最远到达的位置。

然后对于每次询问都走一遍即可。

代码

/*
* @Author: wxyww
* @Date: 2019-06-06 10:55:48
* @Last Modified time: 2019-06-06 14:54:02
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 1000000 + 100,logN = 23;
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int f[N][logN + 1];
int query(int l,int r) {
ll ans = 0;
for(int i = logN - 1;i >= 0;--i) {
if(f[l][i] < r) {
l = f[l][i];
ans += (1 << i);
}
}
l = f[l][0];ans++;
if(l < r) return -1;
return ans; }
int main() {
int n = read(),m = read();
int mx = 0;
for(int i = 1;i <= n;++i) {
int l = read() + 1,r = read() + 1;
f[l][0] = max(f[l][0],r);
mx = max(mx,r);
} for(int i = 1;i <= mx;++i) f[i][0] = max(f[i][0],max(i,f[i - 1][0])); for(int j = 1;j < logN;++j)
for(int i = 1;i <= mx;++i)
f[i][j] = f[f[i][j - 1]][j - 1]; while(m--) {
int l = read() + 1,r = read() + 1;
printf("%d\n",query(l,r));
}
return 0;
}

最新文章

  1. vue.js存储--localStorage
  2. ASP.NET Razor——ASP.NET Razor - C#代码语法
  3. WebService 不依赖配置文件直接在构造函数配置地址
  4. maven-修改本地仓库存放地址
  5. 《Java数据结构与算法》笔记-CH4-5不带计数字段的循环队列
  6. 使用eclipse生成文档(javadoc)
  7. 关于Firefox浏览器如何支持ActiveX控件,一个小的Hellow World
  8. Java [leetcode 23]Merge k Sorted Lists
  9. LCD显示方向
  10. 不同版本PHP之间cURL的区别(-经验之谈)
  11. SpringSecurity数据库中存储用户、角色、资源
  12. 天气情况(思维,dp思想)
  13. iOS开展-Xcode技巧总结(持续更新)
  14. JavaBean自动生成get和set方法
  15. Linux第七节随笔-中 /date / ln /
  16. SharePoint 查找字段内部名称的小方法
  17. 关于Django升级的一些联想
  18. 【java】i++与++i、i--运算
  19. vue and jest测试
  20. nginx代理配置 配置中的静态资源配置,root 和 alias的区别。启动注意事项

热门文章

  1. Java Metrics工具介绍
  2. DirectShow 学习方法
  3. vue中使用better-scroll的2种方式简述
  4. tensorflow之tf.squeeze()
  5. shell脚本语言与linux命令的联系与区别
  6. Tomcat put上传漏洞_CVE2017-12615( JSP Upload Bypass/Remote Code Execution)
  7. AOP方法拦截获取参数上的注解
  8. WPF,ComboBox,取汉字首字母,extBoxBase.TextChanged
  9. 2019年JVM最新面试题,必须收藏它
  10. Subversion——密码保存位置