我们考虑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的更多相关文章

  1. codeforces #310 div1 E

    算得上是比较水的E题了吧,自己想了想写了写居然1A了 对于这道题,我们很容易想到对于原图的一个边双,定向后任意两点间一定可达 那么我们可以求出原图的边双并将每个边双缩成一个点 那么原图就变成了无环的无 ...

  2. codeforces #310 div1 D

    一开始写了个暴力模拟绳子的摆动轨迹 然后在Test 16 T掉了 后来%了一下别人的代码,发现需要对特殊情况进行特殊处理 首先我们考虑绳子的向右摆动,设当前位置为p,绳子当前长度为L 如果其旋转中心位 ...

  3. codeforces #310 div1 C

    操作无论是U还是L,都会使原图形分裂成两个图形,且两个图形的操作互不影响 我们又发现由于操作点只可能在下斜线上,如果将操作按x排序 那么无论是U还是L,都会将操作序列完整分割成两半,且两个操作序列互不 ...

  4. codeforces #310 div1 A

    首先我们考虑最暴力的拆解拼凑 显然拆分掉所有的链需要 n-m 次 之后拼凑需要 n-1 次 然后由题目规定可知:只有从1出发且连续的链不用拆掉,其余的都必须拆掉(因为两个都套有娃娃的套娃不能组合) 我 ...

  5. codeforces 407 div1 B题(Weird journey)

    codeforces 407 div1 B题(Weird journey) 传送门 题意: 给出一张图,n个点m条路径,一条好的路径定义为只有2条路径经过1次,m-2条路径经过2次,图中存在自环.问满 ...

  6. codeforces 407 div1 A题(Functions again)

    codeforces 407 div1 A题(Functions again) Something happened in Uzhlyandia again... There are riots on ...

  7. codeforces #313 div1 E

    首先我们要注意到一个事情 如果一个灯塔向左覆盖,那么比他小的某个灯塔如果向左覆盖的端点大于当前塔向左覆盖的端点,他一定向右覆盖 对于当前灯塔向右覆盖也是同理 那么我们只需要记录当前覆盖到的端点就可以完 ...

  8. codeforces #305 div1 done

    总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目 ...

  9. Codeforces #254 div1 B. DZY Loves FFT 暴力乱搞

    B. DZY Loves FFT 题目连接: http://codeforces.com/contest/444/problem/B Description DZY loves Fast Fourie ...

随机推荐

  1. spring自定义注解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. OC3-父类指针指向子类对象

    // // Cat.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. ...

  3. GitHub 基本操作流程

    GitHub是最先进的分布式版本控制工具,下面是我学习中总结的操作流程,仅供参考 ----------------------------------------------------------- ...

  4. IE 8 中 parseInt 的注意点

    今天碰到个坑爹的问题,一句 parseInt(StringNum) 在 IE 8 里面居然会出错,后来发现是因为 IE 8 中 parseInt("08") 和 parseInt( ...

  5. 应注意的Flex&Bison潜规则

    1.Flex的二义性模式 语法分析器匹配输入时匹配尽可能多的字符串 如果两个模式都可以匹配的话,匹配在程序中更早出的模式. 针对这一点的理解,在语法分析文件当中,token的识别,应从特殊到一般的过程 ...

  6. 3.IP转发

    1. "vim  /usr/lib/sysctl.d/00-system.conf"在#Disable netfilter on bridges.栏下面添加行:"net. ...

  7. jLink(v8)GDB 命令总结

    /** ****************************************************************************** * @author    Maox ...

  8. JAVA中的代理技术(静态代理和动态代理)

    最近看书,有两个地方提到了动态代理,一是在Head First中的代理模式,二是Spring AOP中的AOP.所以有必要补充一下动态代理的相关知识. Spring采用JDK动态代理和CGLib动态代 ...

  9. 关于Socket编写简单聊天工具的总结(原创)

    这段时间再看socket编程,虽然现在是刚刚接触,但是还是忍不住想写一篇总结,来激励自己努力学习,写的不好的地方,还请大家指教啊! 下面针对一个简单的发送消息和文件的程序说说吧.   首先是服务器需要 ...

  10. Setfocus - IE 需要使用setTimeout

    setTimeout(function () { $('#controlid').focus(); }, 100); document.getElementById('filterPopupInput ...