会议中心[APIO2009]
思路
这一题的正解是倍增的,但是由于我太蒟蒻了,所以我选了一个不算正解但是有可以拿满分的题目学习
思路和我考场上其实差不多,只是我无法实现....
下面我先来介绍几个数组的用途
1.s,s数组代表的是枚举的i时,包括i区间在内最多有多少个区间
2.p数组,p[i]记录的是在这一区间和这一区间之前,字典序最小的并且满足使区间数最多的区间的位置
3.而pr数组代表的是由哪一个区间+1转移过来的...(大概是这个意思,表达能力不是很好)
然后我们就要讨论情况了
第一种情况是我们对这个区间有更新,就是说是由这个区间加上它前面的区间可以构成一个更大的区间总和
第二种情况就是守老本,看上一层得到的解是否依然更加优秀
所以我们就要有不同的处理方式
m是在该区间之前,满足其r最接近当前区间的l的,然后我们就看
如果:
s[m]+1>s[i-1] ,我们就要更新,即p[i]=i,s[i]=s[m]+1;
s[m]+1<s[i-1],我们就守老本,即p[i]=p[i-1],s[i]=s[i-1];
但是还有一种情况,就是2者相等,这是我们就要有选择了,因为我们既然选择了这个,后面的方案就是确定了的,但是前面的方案我们就要选择更优的,即字典序更小的
那就是判断了,具体见代码
tips:是由那个点转移过来的我们要记录好,到时候判断更优的时候需要
二分就不要问我了,我也有点小蒙
#include<bits/stdc++.h>
#define ll long long
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,a,b) for(register int i=a;i>=b;i--)
using namespace std;
const int N=+;
int n;
int p[N],pr[N],s[N];
int q[N];
struct s1
{
int l,r,id;
}a[N];
bool cmp(s1 x,s1 y)
{
return x.r<y.r;
}
int scan()
{
int as=,f=;
char c=getchar();
while(c>''||c<''){if(c=='-') f=-;c=getchar();}
while(c>=''&&c<=''){as=(as<<)+(as<<)+c-'';c=getchar();}
return as*f;
}
int main()
{
n=scan();
FOR(i,,n)
{
a[i].l=scan();a[i].r=scan();a[i].id=i;
}
sort(a+,a+n+,cmp);
FOR(i,,n)
{
int l=,r=i-,m=;
while(l<=r)
{
int mid=(l+r)>>;
if(a[mid].r<a[i].l) m=mid,l=mid+;
else r=mid-;
}
//现在我们找到了最近的一个区间
int f=s[m]+;
pr[i]=p[m];
if(f>s[i-]) s[i]=f,p[i]=i;
else if(s[i-]>f) s[i]=s[i-],p[i]=p[i-];
else
{
int p1=p[i-],p2=i,min1=1e9,min2=1e9;
while(pr[p1]!=pr[p2])
{
if(a[p1].id<min1) min1=a[p1].id;
if(a[p2].id<min2) min2=a[p2].id;
p1=pr[p1];p2=pr[p2];
}
if(a[p1].id<min1)min1=a[p1].id;//处理"祖先"相同但当前结点不同
if(a[p2].id<min2) min2=a[p2].id;
if(min1<min2) s[i]=s[i-],p[i]=p[i-];
else s[i]=f,p[i]=i,pr[i]=p[m];
}
}
int now=p[n],top=;
cout<<s[n]<<endl;
while(now)
{
q[++top]=a[now].id;now=pr[now];
}
sort(q+,q+top+);
FOR(i,,top) cout<<q[i]<<" ";
return ;
}
会议中心[APIO2009]的更多相关文章
- [APIO2009]会议中心
[APIO2009]会议中心 题目大意: 原网址与样例戳我! 给定n个区间,询问以下问题: 1.最多能够选择多少个不相交的区间? 2.在第一问的基础上,输出字典序最小的方案. 数据范围:\(n \le ...
- 【BZOJ】【1178】【APIO2009】convention会议中心
贪心 如果不考虑字典序的话,直接按右端点排序,能选就选,就可以算出ans…… 但是要算一个字典序最小的解就比较蛋疼了= = Orz了zyf的题解 就是按字典序从小到大依次枚举,在不改变答案的情况下,能 ...
- 1178: [Apio2009]CONVENTION会议中心
1178: [Apio2009]CONVENTION会议中心 https://lydsy.com/JudgeOnline/problem.php?id=1178 分析: set+倍增. 首先把所有有包 ...
- bzoj1178 [Apio2009]CONVENTION会议中心 区间dp+贪心
[Apio2009]CONVENTION会议中心 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1130 Solved: 444[Submit][S ...
- 【题解】[APIO2009]会议中心
[题解][P3626 APIO2009]会议中心 真的是一道好题!!!刷新了我对倍增浅显的认识. 此题若没有第二份输出一个字典序的方案,就是一道\(sort+\)贪心,但是第二问使得我们要用另外的办法 ...
- [APIO2009]会议中心(贪心)
P3626 [APIO2009]会议中心 题目描述 Siruseri 政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很 感兴趣,他们希望能够在里面举行会议. 对于一个客户而言,仅当在开会时能 ...
- BZOJ1178 [Apio2009]CONVENTION会议中心
本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description Siruseri政府建造了 ...
- 【BZOJ-1178】CONVENTION会议中心 倍增 + set (神思路好题!)
1178: [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 812 Solved: 323[Subm ...
- Java实现 蓝桥杯VIP 算法训练 会议中心
算法训练 会议中心 时间限制:2.0s 内存限制:512.0MB 会议中心 Siruseri政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很感兴趣,他们希望能够在里面举行会议. 对于一个客户 ...
随机推荐
- 【APUE】Chapter13 Daemon Processes
这章节内容比较紧凑,主要有5部分: 1. 守护进程的特点 2. 守护进程的构造步骤及原理. 3. 守护进程示例:系统日志守护进程服务syslogd的相关函数. 4. Singe-Instance 守护 ...
- 「暑期训练」「Brute Force」 Optimal Point on a Line (Educational Codeforces Round 16, B)
题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of dis ...
- 【java并发编程实战】第八章:线程池的使用
1.线程饥饿锁 定义:在线程池中,如果任务的执行依赖其他任务,那么可能会产生线程饥饿锁.尤其是单线程线程池. 示例: public class ThreadDeadStarveTest { publi ...
- 论文翻译_Tracking The Untrackable_Learning To Track Multiple Cues with Long-Term Dependencies_IEEE2017
Tracking The Untrackable: Learning to Track Multiple Cues with Long-Term Dependencies 跟踪不可跟踪:学习跟踪具有长 ...
- UVa 294 - Divisors 解题报告 c语言实现 素数筛法
1.题目大意: 输入两个整数L.H其中($1≤L≤H≤10^9,H−L≤10000$),统计[L,H]区间上正约数最多的那个数P(如有多个,取最小值)以及P的正约数的个数D. 2.原理: 对于任意的一 ...
- SPOJ 1812 Longest Common Substring II(后缀自动机)(LCS2)
A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...
- 望岳物业APP开发过程
望岳物业APP开发过程 1.望岳组员们讨论决定了做的项目及模块功能. 2.物业管理APP图标设计以及写项目的ER图,主要功能流程图. 3.项目体系结构设计和界面设计. 4.了解物业APP的几个功能,然 ...
- 基于twemproxy和vip实现redis集群的无感知弹性扩容
目标是实现redis集群的无感知弹性扩容 关键点 1.是无感知,即对redis集群的用户来说服务ip和port保持不变 2.弹性扩容,指的是在需要时刻可以按照业务扩大redis存储容量. 1.业务场景 ...
- 微信小程序—setTimeOut定时器的坑
原文地址: http://fanjiajia.cn/2018/06/27/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E2%80%94setTimeOu ...
- bootsrap 上传插件fileinput 简单使用
1.安装 下载fileinput文件,载入对应的css+js文件,如下: <link href="css/bootstrap.min.css" rel="style ...