题目大意:

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

解题思路:

先把区间及询问离散化。

由于要求的区间不相交,所以一旦一个区间覆盖了另一个区间,该区间就没有用了,可以去掉。处理时先把区间按l为第一关键字从小到大,r为第二关键字从大到小排序,然后从第一个开始入栈,如果栈顶区间右端点大于等于当前区间右端点就将栈顶区间弹出。

可以发现这样处理以后剩下的区间左右端点都是单调递增的。那么对于一个询问(a,b),按贪心的思想,肯定是从离左端点最近的区间开始依次按要求拿最优,但这样的复杂度是O(n2n^2)的,怎么优化呢?

于是想到了倍增,r[i][j]表示从数轴上i开始取2j2^j个合法区间后的右端点位置,预处理时扫描一边,i右侧离i最近的区间的右端点就是r[i][0],然后r[i][j]=r[r[i][j-1][j-1]了。处理时就像跳lca的第二段一样就可以了(详见代码中solve函数)。

时间复杂度为O(nlogn)。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#define ll long long
using namespace std;int getint()
{int i=0,f=1;char c;for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar());if(c=='-')f=-1,c=getchar();for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';return i*f;
}const int N=100005;
struct node
{int l,r;inline friend bool operator < (const node &a,const node &b){if(a.l!=b.l)return a.l<b.l;return a.r>b.r;}
}a[N],q[N];
int n,m,mx,b[N<<2];
int top,stk[N];
int r[N<<2][20];void lsh()
{sort(b+1,b+mx+1);mx=unique(b+1,b+mx+1)-b-1;for(int i=1;i<=n;i++){a[i].l=lower_bound(b+1,b+mx+1,a[i].l)-b;a[i].r=lower_bound(b+1,b+mx+1,a[i].r)-b;}for(int i=1;i<=m;i++){q[i].l=lower_bound(b+1,b+mx+1,q[i].l)-b;q[i].r=lower_bound(b+1,b+mx+1,q[i].r)-b;}
}void pre()
{sort(a+1,a+n+1);for(int i=1;i<=n;i++){while(a[stk[top]].r>=a[i].r&&top)top--;stk[++top]=i;}n=top;for(int i=1;i<=n;i++)a[i]=a[stk[i]];int p=1;for(int i=1;i<=mx;i++){if(i>a[p].l)++p;if(p>n)break;r[i][0]=a[p].r;}for(int j=1;(1<<j)<=mx;j++)for(int i=1;i<=mx;i++)r[i][j]=r[r[i][j-1]][j-1];
}void solve(int x,int y)
{int ans=0;for(int i=19;i>=0;i--)if(r[x][i]&&r[x][i]<=y)ans+=(1<<i),x=r[x][i];cout<<ans<<'\n';
}int main()
{//freopen("lx.in","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){mx=top=0;memset(r,0,sizeof(r));for(int i=1;i<=n;i++){a[i].l=getint(),a[i].r=getint();b[++mx]=a[i].l,b[++mx]=a[i].r;}for(int i=1;i<=m;i++){q[i].l=getint(),q[i].r=getint();b[++mx]=q[i].l,b[++mx]=q[i].r;}lsh();pre();for(int i=1;i<=m;i++)solve(q[i].l,q[i].r);}return 0;
}

hdu4343 Interval query【贪心+倍增】相关推荐

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

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

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

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

  3. 【HDU 4343】Interval query(倍增)

    BUPT2017 wintertraining(15) #8D 题意 给你x轴上的N个线段,M次查询,每次问你[l,r]区间里最多有多少个不相交的线段.(0<N, M<=100000) 限 ...

  4. [hdu4343]interval query

    xx 转载于:https://www.cnblogs.com/lxzl/p/11207128.html

  5. 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]上,有多少个互不相 ...

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

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

  7. HDU 4343 贪心+倍增

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

  8. Interval query

    题意: 给出数轴上的N个区间,M个询问"QUERY(a, b)", 意为[a, b]之间不相交的集合的最大数量是多少. 解法: 考虑 $O(n)$ 的贪心做法,预处理出对于每一个位 ...

  9. LOJ6435【PKUSC2018】星际穿越题解(贪心+倍增)

    题目:LOJ6435. 题目大意:给定一张无向图 n n n个点,表示现在又知道了一些信息为每个点 i i i与编号为 [ l i , i − 1 ] [l_i,i-1] [li​,i−1]的点有连边 ...

最新文章

  1. 营销自动化的4大预测分析错误
  2. hexo绑定个人域名
  3. FamilyFilter(4)
  4. 深入浅出 PouchContainer 容器化业务实践 Workshop 开放报名
  5. xp修改时间同步服务器地址,xp时间同步服务器地址更换
  6. IntelliJ IDEA for Mac 在eclipse(MacOS)模式下的快捷键
  7. haskell vscode下的环境搭配(包含各种坑的解决办法)
  8. 表格状态列_不用软件也能做好多个项目跟进管理?我用一个协同表格就搞定
  9. oracle中使用java存贮过程
  10. VS C++ sprintf 格式
  11. 红米K30Pro手机电路图纸 主板+小板电路原理图
  12. 黑苹果驱动_黑苹果怎么更新驱动程序?
  13. 汽车电瓶电压12V验证
  14. 【CloudShell】阿里云壳EDR卸载指南
  15. 火狐浏览器叫板苹果:绝不登录iOS平台
  16. PDF分割成两页怎么弄?来看看这3个工具
  17. Nvidia AGX Xavier MAX9286 GMSL 载板
  18. 像素、分辨率、帧率、码率、清晰度的区别
  19. SQL 修改日期类型,只修改年月日不修改时分秒
  20. eeglab在MATLAB中安装教程

热门文章

  1. TechSmith Snagit 2020 中文版
  2. Tips Tricks
  3. 基于basys2驱动LCDQC12864B的verilog设计图片显示
  4. input不能输入中文
  5. LoveEmperor-王子様 支付宝内置浏览器支付 js+java
  6. 计算机语言属于生物学,西安交通大学19年3月课程考试《药物信息学》作业考核试题【标准答案】...
  7. 网站可行性报告范文_青浦写可行性报告范文编写公司
  8. 1.pytorch学习:安装pytorch
  9. 208个最新最全大数据/人工智能专有名词术语 中英对照
  10. 【ctf】ret2text