bzoj1178/luogu3626 会议中心 (倍增+STL::set)
贪心地,可以建出一棵树,每个区间对应一个点,它的父亲是它右边的、与它不相交的、右端点最小的区间。
为了方便,再加入一个[0,0]区间
于是就可以倍增来做出从某个区间开始,一直到某个右界,这之中最多能选多少区间
这样的话,可以从[0,0]区间,倍增做出第一问的答案
考虑第二问,我们需要尽量选编号小的区间,于是只要判断我们如果选了这个区间 还能不能选够那么多就可以了
而且前面已经选过的就钦定住了
开一个set来放下已经选过的区间,按左端点从小到大排序
为了方便,一开始先把[0,0]区间和[inf,inf]区间加进去。设当前区间是x
这样的话,只要找到前驱pre、后继nxt,判断pre、nxt是否和x相交,相交就不做了
然后看从pre到nxt能选几个、(pre到x)+(x到nxt)+1能选几个,看看是否相等,来判断选不选x
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=2e5+,inf=1e9+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Node{
int l,r,i;
Node (int a=,int b=,int c=){l=a,r=b,i=c;}
}pos[maxn],pos2[maxn],pos3[maxn];
bool operator < (Node a,Node b){return a.l<b.l;}
int N,M;
int ma[maxn*],fa[maxn][],cnt[maxn][];
set<Node> st;
bool flag[maxn]; inline bool cmp(Node a,Node b){return a.l<b.l;}
inline bool cmp2(Node a,Node b){return a.r<b.r;} inline int getst(int x,int bnd){
int re=;
for(int i=;i>=;i--){
if(fa[x][i]&&pos2[fa[x][i]].r<bnd)
re+=cnt[x][i],x=fa[x][i];
}
return re;
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd();
for(i=,j=;i<=N;i++){
pos[i].l=rd(),pos[i].r=rd();pos[i].i=i;
}
memcpy(pos2,pos,sizeof(pos));
memcpy(pos3,pos,sizeof(pos));
sort(pos+,pos+N+,cmp);
sort(pos3+,pos3+N+,cmp2);
int mm=inf,mi=;
for(i=N,j=N;i;i--){
for(;pos[j].l>pos3[i].r;j--){
if(pos[j].r<mm) mm=pos[j].r,mi=pos[j].i;
}
int x=pos3[i].i;
fa[x][]=mi;cnt[x][]=;
// printf("%d %d\n",x,fa[x][0]);
for(k=;fa[x][k]&&fa[fa[x][k]][k];k++){
fa[x][k+]=fa[fa[x][k]][k];
cnt[x][k+]=cnt[x][k]+cnt[fa[x][k]][k];
}
}
fa[N+][]=pos3[].i;cnt[N+][]=;
for(k=;fa[N+][k]&&fa[fa[N+][k]][k];k++){
fa[N+][k+]=fa[fa[N+][k]][k];
cnt[N+][k+]=cnt[N+][k]+cnt[fa[N+][k]][k];
}
printf("%d\n",getst(N+,inf)); st.insert(Node(,,N+));st.insert(Node(inf,inf,N+));
for(i=;i<=N;i++){
set<Node>::iterator it=st.lower_bound(pos2[i]);
Node nxt=*it;
Node pre=*(--it);
if(nxt.l<=pos2[i].r||pre.r>=pos2[i].l) continue;
int n1=getst(pre.i,pos2[i].l)+getst(i,nxt.l)+;
int nn=getst(pre.i,nxt.l);
// printf("%d %d %d %d %d\n",i,pre.i,nxt.i,nn,n1);
if(n1<nn) continue;
flag[i]=;
st.insert(pos2[i]);
}
for(i=;i<=N;i++) if(flag[i]) printf("%d ",i);
return ;
}
bzoj1178/luogu3626 会议中心 (倍增+STL::set)的更多相关文章
- 【BZOJ-1178】CONVENTION会议中心 倍增 + set (神思路好题!)
1178: [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 812 Solved: 323[Subm ...
- BZOJ1178 APIO2009 会议中心 贪心、倍增
传送门 只有第一问就比较水了 每一次贪心地选择当前可以选择的所有线段中右端点最短的,排序之后扫一遍即可. 考虑第二问.按照编号从小到大考虑每一条线段是否能够被加入.假设当前选了一个区间集合\(T\), ...
- BZOJ1178 [Apio2009]CONVENTION会议中心
本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description Siruseri政府建造了 ...
- bzoj1178 [Apio2009]CONVENTION会议中心 区间dp+贪心
[Apio2009]CONVENTION会议中心 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1130 Solved: 444[Submit][S ...
- [APIO2009]会议中心
[APIO2009]会议中心 题目大意: 原网址与样例戳我! 给定n个区间,询问以下问题: 1.最多能够选择多少个不相交的区间? 2.在第一问的基础上,输出字典序最小的方案. 数据范围:\(n \le ...
- 1178: [Apio2009]CONVENTION会议中心
1178: [Apio2009]CONVENTION会议中心 https://lydsy.com/JudgeOnline/problem.php?id=1178 分析: set+倍增. 首先把所有有包 ...
- 会议中心[APIO2009]
会议中心 思路 这一题的正解是倍增的,但是由于我太蒟蒻了,所以我选了一个不算正解但是有可以拿满分的题目学习 思路和我考场上其实差不多,只是我无法实现.... 下面我先来介绍几个数组的用途 1.s,s数 ...
- 【题解】[APIO2009]会议中心
[题解][P3626 APIO2009]会议中心 真的是一道好题!!!刷新了我对倍增浅显的认识. 此题若没有第二份输出一个字典序的方案,就是一道\(sort+\)贪心,但是第二问使得我们要用另外的办法 ...
- [APIO2009]会议中心(贪心)
P3626 [APIO2009]会议中心 题目描述 Siruseri 政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很 感兴趣,他们希望能够在里面举行会议. 对于一个客户而言,仅当在开会时能 ...
随机推荐
- 2019年北航OO第2单元(电梯模拟)总结
1 三次作业的设计策略 经过了上一单元的训练,我也积累了一些设计策略上的经验.在这一单元的一开始,我便尽可能地把问题中的各个功能实体区分开来,分别封装成类,以便于随后作业中新需求的加入.与此同时,我也 ...
- # 2017-2018-2 20155319『网络对抗技术』Exp2:后门原理与实践
2017-2018-2 20155319『网络对抗技术』Exp2:后门原理与实践 1.实验准备 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用s ...
- 《网路对抗》Exp8 WEB基础实践
20155336<网路对抗>Exp8 WEB基础实践 一.基础问题回答 1.什么是表单 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等 ...
- What's new in XAML of .NET 4.0( .NET 4.0中XAML的新功能 )
原文 What's new in XAML of .NET 4.0 What's new in XAML of .NET 4.0 Easy Object References with {x:Refe ...
- C# event线程安全
突然想到有关C#中使用event特性时关于线程安全的问题,以前虽然有遵从“复制引用+null判断”的模式(盲目地),但没有深入了解和思考. 为之查询了资料和实验,对此有了进一步的理解. 一般event ...
- C语言学习之枚举类型
前言 枚举(enum)类型是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把 ...
- 设计模式 笔记 适配器模式 Adapter
//---------------------------15/04/13---------------------------- //Adapter 适配器模式 ----类对象结构型模式 /* 1: ...
- Jenkins+Maven+SVN+Nexus自动化部署代码实例
本文接着上篇安装jenkins,安装相关插件,使用我们公司持续集成的测试环境实例进行演示 ========= 完美的分割线 ========== 1.安装jenkins的maven插件 如果要使用je ...
- idea使用actiBPM插件中文乱码
idea 安转activiti插件后,编辑流程图发现保存后中文乱码,并且idea的字符集(Settings—>Editor—>File Encodings)已经设置为UTF-8,流程图中中 ...
- dokuwiki编辑器修改-color插件-添加按钮
需求 dokuwiki的编辑工具栏是以 MediaWiki 的为基础发展来的. 在它的编辑器color插件的颜色按钮中,我想添加新的按钮功能.如红色字体黄色背景的修饰,类似于涂中文字强调的意思. 步骤 ...