codeforces #310 div1 B
我们考虑n-1座桥每座桥需要的长度在一个区间[L,R]中
之后我们现在有m座桥,每个桥的长度为k
题意就是要求一个匹配方案
显然如果数据范围不大直接KM就可以了
可是20w的数据KM显然要T
所以我们考虑这是个区间问题,我们可以贪心
考虑两座桥A,B, A的区间被B的区间所包含
那么优先考虑A总比优先考虑B优
所以我们可以将区间按右端点从小到大排序,这样被包含的区间永远是优先考虑的
之后我们考虑选哪个点与当前区间匹配
这个时候可以考虑当前的决策对后面的影响
如果后面的区间包含当前区间,那么无论怎样决策都会使后面区间可选点-1
如果后面的区间不包含当前区间,那么选尽可能靠左的可行点对后面区间的影响最小
所以我们对于每个区间选可行的最靠左的点与之匹配,用set维护即可
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<set>
using namespace std; typedef long long LL;
const int maxn=200010;
int n,m;
LL A[maxn],B[maxn];
struct Segment{
LL L,R;
int id;
}t[maxn];
struct bridge{
LL len;
int id;
}c[maxn];
int ans[maxn];
set<pair<LL,int> >S;
bool cmp(const Segment &A,const Segment &B){
if(A.R==B.R)return A.L>B.L;
return A.R<B.R;
} int main(){
scanf("%d%d",&n,&m);
if(m<n-1){printf("No\n");return 0;}
for(int i=1;i<=n;++i){
scanf("%I64d%I64d",&A[i],&B[i]);
if(i>1){t[i-1].L=A[i]-B[i-1],t[i-1].R=B[i]-A[i-1],t[i-1].id=i-1;}
}
for(int i=1;i<=m;++i){
scanf("%I64d",&c[i].len);
c[i].id=i;
S.insert(make_pair(c[i].len,c[i].id));
}
sort(t+1,t+n,cmp);
for(int i=1;i<n;++i){
pair<LL,int>p=*S.lower_bound(make_pair(t[i].L,-1));
if(p.first<t[i].L){printf("No\n");return 0;}
if(p.first>t[i].R){printf("No\n");return 0;}
else ans[t[i].id]=p.second;
S.erase(p);
}
printf("Yes\n");
for(int i=1;i<n;++i)printf("%d ",ans[i]);
return 0; }
codeforces #310 div1 B的更多相关文章
- codeforces #310 div1 E
算得上是比较水的E题了吧,自己想了想写了写居然1A了 对于这道题,我们很容易想到对于原图的一个边双,定向后任意两点间一定可达 那么我们可以求出原图的边双并将每个边双缩成一个点 那么原图就变成了无环的无 ...
- codeforces #310 div1 D
一开始写了个暴力模拟绳子的摆动轨迹 然后在Test 16 T掉了 后来%了一下别人的代码,发现需要对特殊情况进行特殊处理 首先我们考虑绳子的向右摆动,设当前位置为p,绳子当前长度为L 如果其旋转中心位 ...
- codeforces #310 div1 C
操作无论是U还是L,都会使原图形分裂成两个图形,且两个图形的操作互不影响 我们又发现由于操作点只可能在下斜线上,如果将操作按x排序 那么无论是U还是L,都会将操作序列完整分割成两半,且两个操作序列互不 ...
- codeforces #310 div1 A
首先我们考虑最暴力的拆解拼凑 显然拆分掉所有的链需要 n-m 次 之后拼凑需要 n-1 次 然后由题目规定可知:只有从1出发且连续的链不用拆掉,其余的都必须拆掉(因为两个都套有娃娃的套娃不能组合) 我 ...
- codeforces 407 div1 B题(Weird journey)
codeforces 407 div1 B题(Weird journey) 传送门 题意: 给出一张图,n个点m条路径,一条好的路径定义为只有2条路径经过1次,m-2条路径经过2次,图中存在自环.问满 ...
- codeforces 407 div1 A题(Functions again)
codeforces 407 div1 A题(Functions again) Something happened in Uzhlyandia again... There are riots on ...
- codeforces #313 div1 E
首先我们要注意到一个事情 如果一个灯塔向左覆盖,那么比他小的某个灯塔如果向左覆盖的端点大于当前塔向左覆盖的端点,他一定向右覆盖 对于当前灯塔向右覆盖也是同理 那么我们只需要记录当前覆盖到的端点就可以完 ...
- codeforces #305 div1 done
总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目 ...
- Codeforces #254 div1 B. DZY Loves FFT 暴力乱搞
B. DZY Loves FFT 题目连接: http://codeforces.com/contest/444/problem/B Description DZY loves Fast Fourie ...
随机推荐
- Bresenham算法画填充圆及SDL代码实现
画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯 ...
- 通过命令行连接oracle数据库/进入sql plus
1.直接打开SQL Plus登录,需要用户名和密码 开始->程序->Oracle->应用程序开发->sqlplus 我的电脑是“开始”->“Oracle - OraDb1 ...
- Source Insight 技巧总结
以下文章转载自网络:http://blog.csdn.net/junjie319/article/details/6910992 http://www.cnblogs.com/bluestorm/ar ...
- asp.net 中使用less
首先 ,需要知道 whats the less; 实际上less 只是针对css比较难于维护和抽象这种现象,而创造的一个工具. 然后,在抛开语言环境的情况下(例如.net 是vs环境,java是ecl ...
- HACMP 学习笔记--转载自wangjialiang-csdn博客
An41 教程: Ha: 初始阶段的规划最重要 第一部分:概念和模型 Ha 目标:掩盖和消除计划和非计划的宕机 Eliminate SPOF :消除单节点故障, single point of fai ...
- Android Handler 原理
在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handle ...
- mongo数据库基础操作
概念 一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,每个collection可以存放多个文档(document),每个文档都以BSON(binar ...
- ZENCART 打开/关闭日志文件
优秀的php开源程序很多都只带生成日志文件的功能,这类功能的开发可以帮助到站长在调试网站的时候及时的改正网站存在的错误,但是这类错误日志由来并非网站出现什么严重不可挽救的错误,大部分是一些未定义变量这 ...
- php 随机显示图片的函数(实例)
转自:http://www.jbxue.com/article/12695.html 发布:thatboy 来源:Net [大 中 小] 本文分享一个php实现的随机显示图片的函数,可 ...
- Spark Streaming揭秘 Day24 Transformation和action图解
Spark Streaming揭秘 Day24 Transformation和action图解 今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和a ...