BUPT2017 wintertraining(15) #8D

题意

给你x轴上的N个线段,M次查询,每次问你[l,r]区间里最多有多少个不相交的线段。(0<N, M<=100000)
限时15000 MS

题解

如果不看限时,当作是1000MS的话= =,那么可以用倍增来做。
先按右端点排序。
可以去掉一下包含了其它区间的区间,可以优化一点点。
用 f[i][j] 表示 i 节点下 \(2^n\) 个不相交的线段下标。
预处理出 f 数组。
查询的时候,左端点用二分,然后右端点用倍增来找。
实际上不用倍增,也可以卡时间过。

代码

780ms

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 100005
using namespace std;
struct Seg{int s,e;bool operator < (const Seg &b) const{return e<b.e||e==b.e&&s>b.s;}
}seg[N];
int n,m;
int f[N][32];
int main(){while(~scanf("%d %d", &n, &m)){for(int i=0;i<n;++i)scanf("%d %d", &seg[i].s, &seg[i].e);memset(f,-1,sizeof f);sort(seg,seg+n);int nn=0;for(int i=1;i<n;++i)if(seg[nn].s<seg[i].s)seg[++nn]=seg[i];++nn;for(int i=0;i<nn;++i){f[i][0]=i+1;while(f[i][0]<nn&&seg[f[i][0]].s<seg[i].e)++f[i][0];if(f[i][0]==nn)f[i][0]=-1;}for(int j=0;j<30;++j)for(int i=0;i<nn;++i)if(f[i][j]!=-1)f[i][j+1]=f[f[i][j]][j];for(int i=1,s,e;i<=m;++i){scanf("%d %d", &s, &e);int l=0, r=nn-1;while(l<r){int m=l+r>>1;if(seg[m].s<s)l=m+1;elser=m;}if(seg[l].e>e||seg[l].s<s)puts("0");else{int ans=1;for(int j=29;j>=0;--j){if(f[r][j]!=-1&&seg[f[r][j]].e<=e){r=f[r][j];ans+=(1<<j);}}printf("%d\n", ans);}}}return 0;
}

1045ms

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 100005
using namespace std;
struct Seg {int s, e;bool operator < (const Seg &b) const {return e < b.e || e == b.e && s > b.s;}
} seg[N];
int n, m;
int main() {while(~scanf("%d %d", &n, &m)) {for(int i = 0; i < n; ++i)scanf("%d %d", &seg[i].s, &seg[i].e);sort(seg, seg + n);int nn = 0;for(int i = 1; i < n; ++i)if(seg[nn].s < seg[i].s)seg[++nn] = seg[i];++nn;for(int i = 1, s, e; i <= m; ++i) {scanf("%d %d", &s, &e);int l = 0, r = nn - 1;while(l < r) {int m = l + r >> 1;if(seg[m].s < s)l = m + 1;elser = m;}if(seg[l].e > e || seg[l].s < s)puts("0");else {int ans = 1;for(int i = l, j = l + 1; j < nn && seg[j].e <= e; ++j) {if(seg[i].e <= seg[j].s) {i = j;++ans;}}printf("%d\n", ans);}}}return 0;
}

转载于:https://www.cnblogs.com/flipped/p/HDU4343.html

【HDU 4343】Interval query(倍增)相关推荐

  1. HDU 4343 Interval query 倍增思想, DP

    题目大意: 就是现在给出N个区间(纠结了一下应该都是开区间), 区间(l, r)满足两边端点都是不超过10^9的非负整数, 现在有M次询问, 每次询问区间(L, R)中最多可以找出多少个区间(来自于N ...

  2. HDU 4343 Interval query(倍增思想+贪心)

     题意:给定n(n<=100000)个区间(左闭右开)和m(m<=100000)次询问[l, r],问所有在[l, r]区间内最多有多少个两两不相交的区间., 思路:首先贪心的思想,去 ...

  3. hdu 4343 Interval query

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4343 题目大意:求区间最多有多少不相交线段. 题目思路:先用倍增思想求出dp[i][j]表示左端点为j ...

  4. HDU  4343 Interval query

    HDU 4343 Interval query 题目给定nn个区间(li,ri),1≤i≤n(l_i,r_i),1\leq i\leq n MM次询问.询问在区间[L,R][L,R]上,有多少个互不相 ...

  5. HDU4343[Interval query]--倍增思想+二分+离散

    博主吐槽一下:本蒟蒻差点就屎在这道鬼畜题上了QAQ(大佬可以忽视) [链接] HDU4343 [题目大意] 给你N个区间,和M个询问,对于每个询问,输出询问的一段区间内最多有多少段互不相交的区间. [ ...

  6. 【HDOJ】4343 Interval query

    最大不相交集合的数量. 思路是dp[i][j]表示已经有i个不相交集合下一个不相交集合的最右边界. 离散化后,通过贪心解. 1 /* 4343 */ 2 #include <iostream&g ...

  7. HDU 4343 贪心

    D - Interval query Time Limit: 1.5 Sec Memory Limit: 256 MB Description This is a very simple questi ...

  8. HDU 4343 贪心+倍增

    Problem DescriptionThis is a very simple question. There are N intervals in number axis, and M queri ...

  9. hdu4343 Interval query【贪心+倍增】

    题目大意: 给定n个数轴上特殊的开区间(l,r),m次询问,每次询问(a,b)之间最多有多少个不相交的特殊区间.(1<=n,m<=100000,0<=l,r,a,b<=1000 ...

最新文章

  1. python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...
  2. iOS开发使用半透明模糊效果方法整理
  3. oracle基础之工具系列(持续更新中,,)
  4. openCVPracticalExercise学习笔记01
  5. Java中的HashCode 1 之hash算法基本原理
  6. linux下将多个文件去除文件头合并_使用 PDF Mix Tool 执行常见的 PDF 编辑任务 | Linux 中国...
  7. 南方cass简码识别大全_cass简码识别教程.doc
  8. 伍斯特理工学院计算机硕士怎么样,美国伍斯特理工学院研究生专业排名如何?...
  9. 分析时间复杂度,主定理,势能分析
  10. 重构之处理IE浏览器兼容问题
  11. Windows-dos命令
  12. Android6.0 高通平台 is 32-bit instead of 64-bit 问题
  13. 一键体验安全快捷外贸收款服务,PingPong福贸满足你的个性化需求
  14. 打印机扫描显示服务器磁盘已满,打印机内存已满怎么办 打印机清除内存方法...
  15. 织梦DEDECMS 整合Kindeditor编辑器美化版nkeditor版可H5多图上传摒弃SWF上传
  16. Oracle入门(二)
  17. bed vcf 文件 GRCH37转 GRCH38 hg19 转hg38
  18. c语言 乘法竖式,大整数的乘法运算-C语言版(转)
  19. 易语言服务器怎么断开连接,易语言断开进程网络连接源码
  20. 搜索引擎蜘蛛捕捉器(PHP)

热门文章

  1. 来看看我是如何自学通过PMP的考试
  2. 在国内 PMP 的含金量
  3. 统计学基础(一)—样本与总体
  4. 在进行天猫商品数据爬虫时遇到selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe'
  5. 多个h5文件整理到一个文件夹下面,不改变名字
  6. Elasticsearch集群环境搭建
  7. 【SSA三维路径规划】基于matlab麻雀算法无人机三维路径规划【含Matlab源码 171期】
  8. Java毕设项目基于的智慧小区(java+VUE+Mybatis+Maven+Mysql)
  9. mysql错误262_创建数据库错误262
  10. python 网络爬虫开发第五天