题意

给出一堆线段。
询问者每次可以询问一个整数点,回答者告诉询问者这个点被多少根线段包括。
问询问者最多问多少次,还不能确定任意一个整数点都不可能被所有的线段包含。


题解

首先用O(n)的方法计算出来每个点被多少条线段包含。
突破点:
我们考虑什么情况下不能确定存在整数点被所有线段包括。
反向思考:当存在一个点被所有的线段包括了,那么必定有
cnt(x1)<=cnt(x2)<=...<=cnt(xi)>=cnt(xi+1)>=...>=cnt(xm)cnt(x1)<=cnt(x2)<=...<=cnt(xi)>=cnt(xi+1)>=...>=cnt(xm)cnt(x_1)=cnt(x_{i+1})>=...>=cnt(x_m)
也就是目前询问的点形成了一个凸函数。
一旦我们询问的点不能形成一个凸函数的话,我们就可以断定不存在一个点,使得这个点被所有的线段包含。
因此我们只需要找出最长的凸函数就可以了。
这个可以分成两段:最长非减序列以及最长非增序列,枚举一个点然后拼接两段的,选一个最长的长度就是答案。


代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,m,l,r;
const int maxn = 100007;
int a[maxn],addmark[maxn],dp[maxn],lis[2][maxn],slis[maxn];
int cnt = 0;
int main(){cin>>n>>m;for(int i = 0;i < n;++i){scanf("%d%d",&l,&r);addmark[l] ++;addmark[r+1] --;}int sum = 0;for(int i = 1;i <= m;++i){sum += addmark[i];a[i] = sum;}memset(dp,0x3f,sizeof(dp));for(int i = 1;i <= m;++i){int pos = upper_bound(dp,dp+m,a[i])-dp;dp[pos] = a[i];lis[0][i] = pos+1;}memset(dp,0x3f,sizeof(dp));for(int i = m;i >= 1;i--){int pos = upper_bound(dp,dp+m,a[i])-dp;dp[pos] = a[i];lis[1][i] = pos+1;slis[i] = max(slis[i+1],lis[1][i]);}int ans = 0;for(int i = 1;i <= m;++i){//printf("i:%d %d %d\n",i,lis[0][i],lis[1][i]);ans = max(ans,lis[0][i] + slis[i+1]);}cout<<ans<<endl;return 0;
}

codeforces F.F. Teodor is not a liar! 最长不降子序列相关推荐

  1. CodeForces - 1437E Make It Increasing(确定首尾的最长不下降子序列)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,现在有 m 个位置被锁定,也就是无法进行操作,每次操作可以选择一个没有被锁定的位置,将其更改为任意数值,现在问最少进行多少次操作,可以使得整个 ...

  2. CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)

    CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换)   首先一共有四个操作,第一个和第四个都是线段树的基本操作,直接用线段树实现.      第 ...

  3. f(f(x)) = -x

    来源:http://www.cnblogs.com/yinyueyouge/archive/2009/05/25/1488921.html 原题说的自变量是一个 32 比特的有符号整数,这里扩展之,对 ...

  4. python:f/F,format,%的用法

    目录 一.f/F的用法 二.%的用法 三. format用法 一.f/F的用法 参考文章 1.解析变量 name = 'zhangs' age = 20 res2 = F"姓名:{name} ...

  5. python中F/f表达式优于format()表达式

    F/f表达式可以解析任意类型的数据 具体实现,看下面示例: 1.解析变量 a = 10 b = 20 res1 = F"a+b的值:{a+b}" print(res1) 结果: a ...

  6. python中delta是什么意思_如何使用python计算Delta F/F?

    为了分析实验数据,我最近自学了python.因此,我在很多方面都很无知.我已经设法使我的分析对某些文件有效,但在某些情况下,它崩溃了,我认为这是错误编程的结果.在 目前我导出一个包含3个numpy数组 ...

  7. 【芯片前端】Filelist -f/-F的文件解析方式探究

    前言 测试所用的文件目录(列举关键文件): /home/xiaotu/my_work/uvm_demo -cfg/ -ctl/ -rtl/ -sim/-Makefile -tc/ -th/ -ver/ ...

  8. java中小数后加f_在 Java 中,小数默认为 ,如果要指定 类型请在小数后加 F/f 。_学小易找答案...

    [填空题]Java 语言采用双字节的 编码. [单选题]马斯洛需要层次论所提出的5种需要:生理需要.安全需要.归属需要.( ).自我实现需要 [填空题]String s= " abc &qu ...

  9. fβ,fα,fT,fmax之间的关系

    引用网站:fβ,fα,fT,fmax之间的关系   晶体管参数表上,频率参数有fβ,fα,fT,fmax,好多初学者对这几种参数概念很模糊,怎么搞这么多参数,让人搞不明白.在晶体管发明初期,由于实验室 ...

最新文章

  1. 如何快速在oracle内生成数据,[Oracle]快速生成大量模拟数据的方法
  2. Oracle高级SQL培训与讲解
  3. 创建Socket【Socket编程4】
  4. 局域网内数据采集总结(三)
  5. amtemu v0.9.2下载_悦剪辑安卓版下载-悦剪辑app下载v2.2
  6. 容量规划的一些探讨与实践
  7. N天学习一个Linux命令之grep
  8. 《软件测试》实验一:测试入门
  9. 计算机的配置鼠标,电脑双鼠标怎么设置 电脑双鼠标设置方法
  10. 广州的11个辖区_广东广州下辖的11个行政区域一览
  11. python docx 删除表格
  12. 利用pytorch实现图像分类
  13. iphone13 Pro的运行内存是6gb
  14. MVC框架运行流程和目录结构
  15. IE浏览器版本测试方法
  16. 写给大家看的机器学习书【Part3】直观易懂的感知机学习算法PLA
  17. html掷骰子游戏的代码,jquery实现掷骰子小游戏
  18. 杜家坎装甲兵工程学院计算机二级考点,从丰台区杜家坎到东城区东十四条怎么走??...
  19. 竣达技术丨电池巡检微信云监控系统
  20. mysql 视图会走索引吗_MySQL视图索引与存储过程精析-阿里云开发者社区

热门文章

  1. ubuntu mysql怎么备份_Ubuntu下MySQL备份与异地备份
  2. mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
  3. 7-2 页面置换算法--LRU (50 分)
  4. 一个例子带你搞懂python作用域中的global、nonlocal和local
  5. Java实现线性表(顺序表,链表)
  6. [数据结构-严蔚敏版]P46栈的顺序存储表示
  7. [JavaWeb-Servlet]Servlet3.0注解配置
  8. 二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现
  9. 临界区、互斥量、信号量、事件的区别
  10. 相同类方法之间调用,注解失效的问题