考虑用f[i][j]表示以i为起点(i是时间,所以要离散)选$2^j$条线段(这里不是时间)最小的终点,预处理用倍增的方式来求即可
预处理出这个数组后,就可以很快的求出在$[l,r]$的时间内最多能选多少条线段,类似于树上的倍增(注意判断超过最大时间的情况)
然后从前往后枚举每一段时间,考虑能否加入,当且仅当其分割的那个区间的两部分的答案之和+1=原区间的答案,找区间可以用两个set(分别维护起点和终点)来搞

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 struct ji{
5 int l,r;
6 bool operator < (const ji &k)const{
7 return (l<k.l)||(l==k.l)&&(r<k.r);
8 }
9 }a[N],aa[N];
10 set<int>s1,s2;
11 int n,m,b[N<<1],f[N<<1][21];
12 void build(){
13 memcpy(aa,a,sizeof(a));
14 sort(aa+1,aa+n+1);
15 aa[n+1].l=aa[n+1].r=m+1;
16 for(int i=1,j=1;i<=m;i++){
17 while (i>aa[j].l)j++;
18 f[i][0]=aa[j].r;
19 }
20 for(int i=m-1;i;i--)f[i][0]=min(f[i][0],f[i+1][0]);
21 for(int i=0;i<=20;i++)f[m+1][i]=m+1;
22 for(int j=1;j<=20;j++)
23 for(int i=1;i<=m;i++)f[i][j]=f[min(m,f[i][j-1])+1][j-1];
24 }
25 int query(int l,int r){
26 int ans=0;
27 for(int i=20;i>=0;i--)
28 if (f[l][i]<=r){
29 l=min(m,f[l][i])+1;
30 ans+=(1<<i);
31 }
32 return ans;
33 }
34 int main(){
35 scanf("%d",&n);
36 for(int i=1;i<=n;i++){
37 scanf("%d%d",&a[i].l,&a[i].r);
38 b[++b[0]]=a[i].l;
39 b[++b[0]]=a[i].r;
40 }
41 sort(b+1,b+2*n+1);
42 m=unique(b+1,b+2*n+1)-b-1;
43 for(int i=1;i<=n;i++){
44 a[i].l=lower_bound(b+1,b+m+1,a[i].l)-b;
45 a[i].r=lower_bound(b+1,b+m+1,a[i].r)-b;
46 }
47 build();
48 printf("%d\n",query(1,m));
49 bool flag=0;
50 s1.insert(1);
51 s2.insert(m);
52 for(int i=1;i<=n;i++){
53 if ((!s1.size())||(*s1.begin()>a[i].l)||(*--s2.end()<a[i].r))continue;
54 int x=*--s1.upper_bound(a[i].l),y=*s2.lower_bound(a[i].r);
55 if ((x!=*--s1.end())&&(*s1.upper_bound(a[i].l)<=y))continue;
56 if (query(x,y)==query(x,a[i].l-1)+1+query(a[i].r+1,y)){
57 if (a[i].r==y)s2.erase(y);
58 else s1.insert(a[i].r+1);
59 if (a[i].l==x)s1.erase(x);
60 else s2.insert(a[i].l-1);
61 if (flag)printf(" ");
62 flag=1;
63 printf("%d",i);
64 }
65 }
66 }

[bzoj1178]会议中心的更多相关文章

  1. 【BZOJ-1178】CONVENTION会议中心 倍增 + set (神思路好题!)

    1178: [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 812  Solved: 323[Subm ...

  2. BZOJ1178 [Apio2009]CONVENTION会议中心

    本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description Siruseri政府建造了 ...

  3. bzoj1178 [Apio2009]CONVENTION会议中心 区间dp+贪心

    [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1130  Solved: 444[Submit][S ...

  4. [APIO2009]会议中心

    [APIO2009]会议中心 题目大意: 原网址与样例戳我! 给定n个区间,询问以下问题: 1.最多能够选择多少个不相交的区间? 2.在第一问的基础上,输出字典序最小的方案. 数据范围:\(n \le ...

  5. 【BZOJ】【1178】【APIO2009】convention会议中心

    贪心 如果不考虑字典序的话,直接按右端点排序,能选就选,就可以算出ans…… 但是要算一个字典序最小的解就比较蛋疼了= = Orz了zyf的题解 就是按字典序从小到大依次枚举,在不改变答案的情况下,能 ...

  6. 1178: [Apio2009]CONVENTION会议中心

    1178: [Apio2009]CONVENTION会议中心 https://lydsy.com/JudgeOnline/problem.php?id=1178 分析: set+倍增. 首先把所有有包 ...

  7. 会议中心[APIO2009]

    会议中心 思路 这一题的正解是倍增的,但是由于我太蒟蒻了,所以我选了一个不算正解但是有可以拿满分的题目学习 思路和我考场上其实差不多,只是我无法实现.... 下面我先来介绍几个数组的用途 1.s,s数 ...

  8. 【题解】[APIO2009]会议中心

    [题解][P3626 APIO2009]会议中心 真的是一道好题!!!刷新了我对倍增浅显的认识. 此题若没有第二份输出一个字典序的方案,就是一道\(sort+\)贪心,但是第二问使得我们要用另外的办法 ...

  9. [APIO2009]会议中心(贪心)

    P3626 [APIO2009]会议中心 题目描述 Siruseri 政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很 感兴趣,他们希望能够在里面举行会议. 对于一个客户而言,仅当在开会时能 ...

随机推荐

  1. 单体应用 适合采用 dapr 构建吗?

    缘起今天在微信群里有同学问 "纯.net 项目,有必要上dapr吗?" 当时不假思索的说不是微服务没必要,其他群友也说没必要.下午细想了一下,觉得这个和微服务没有关系,如果我的应用 ...

  2. hdu3001(三进制状压)

    题目大意: 现在给你一个有n个点和m条边的图,每一条边都有一个费用,每个点不能经过超过两次,求所有点至少遍历一次的最小费用 其中n<=10 m没有明确限制(肯定不会超过1e5) 一看到这个数据范 ...

  3. c++中的数学函数

    math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:1 三角函数double sin (double);double cos (double);double tan ( ...

  4. websocket方案调研及实践

    目录 webscoket方案调研及实践 一.使用场景 二.方案调研 1.Ajax短轮询 2.long-polling长轮询 3.iframe长连接 4.XHR-streaming 5.Websocke ...

  5. python在指定一行的下一行插入文本

    给定一个程序,程序中有许多函数,比如,funcA,funcB,现在,如何在生成的函数中插入一个logger()语句? 这里用一个solidity程序做例子 pragma solidity ^0.4.0 ...

  6. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...

  7. [软工顶级理解组] Beta阶段测试报告

    在测试过程中发现了多少Bug? 测试阶段发现并已修复的bug: 尚且存在,但是难以解决或者不影响使用的bug: 计算重修课程的时候,如果重修课程的课程号和原课程号不同,则GPA计算会出现误差.但我们无 ...

  8. [no code][scrum meeting] Beta 7

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月21日15:30,主持者:彭毛小民 下次例会时间:5月22日15:30,主持者:赵涛 昨日为5 ...

  9. python +spatialite + window 解决方案(https://www.jianshu.com/p/5bc7d8b7b429)

    运行环境在windows 10 64bit.先将python安装完成.然后,到 spatilite官网 找到MS(即Microsoft)版本,下载64位的mod_spatialite,将其先解压到目标 ...

  10. 【做题记录】 [JLOI2011]不等式组

    P5482 [JLOI2011]不等式组 超烦人的细节题!(本人调了两天 QAQ ) 这里介绍一种只用到一只树状数组的写法(离线). 树状数组的下标是:所有可能出现的数据进行离散化之后的值. 其含义为 ...