Case of Fugitive

CodeForces - 555B

Andrewid the Android is a galaxy-famous detective. He is now chasing a criminal hiding on the planet Oxa-5, the planet almost fully covered with water.

The only dry land there is an archipelago of n narrow islands located in a row. For more comfort let's represent them as non-intersecting segments on a straight line: island i has coordinates [li, ri], besides, ri < li + 1 for 1 ≤ i ≤ n - 1.

To reach the goal, Andrewid needs to place a bridge between each pair of adjacentislands. A bridge of length a can be placed between the i-th and the (i + 1)-th islads, if there are such coordinates of x and y, that li ≤ x ≤ rili + 1 ≤ y ≤ ri + 1and y - x = a.

The detective was supplied with m bridges, each bridge can be used at most once. Help him determine whether the bridges he got are enough to connect each pair of adjacent islands.

Input

The first line contains integers n (2 ≤ n ≤ 2·105) and m (1 ≤ m ≤ 2·105) — the number of islands and bridges.

Next n lines each contain two integers li and ri (1 ≤ li ≤ ri ≤ 1018) — the coordinates of the island endpoints.

The last line contains m integer numbers a1, a2, ..., am (1 ≤ ai ≤ 1018) — the lengths of the bridges that Andrewid got.

Output

If it is impossible to place a bridge between each pair of adjacent islands in the required manner, print on a single line "No" (without the quotes), otherwise print in the first line "Yes" (without the quotes), and in the second line print n - 1numbers b1, b2, ..., bn - 1, which mean that between islands i and i + 1 there must be used a bridge number bi.

If there are multiple correct answers, print any of them. Note that in this problem it is necessary to print "Yes" and "No" in correct case.

Examples

Input
4 4
1 4
7 8
9 10
12 14
4 5 3 8
Output
Yes
2 3 1
Input
2 2
11 14
17 18
2 9
Output
No
Input
2 1
1 1
1000000000000000000 1000000000000000000
999999999999999999
Output
Yes
1

Note

In the first sample test you can, for example, place the second bridge between points 3 and 8, place the third bridge between points 7 and 10 and place the first bridge between points 10 and 14.

In the second sample test the first bridge is too short and the second bridge is too long, so the solution doesn't exist.

sol:把桥按照长度从小到大排序,对于每两座岛之间的桥长是一个闭区间[L,R]

对于桥一个个枚举过去,如当前桥长是a,对于所有L<=a的找到R最小的那个,贪心一遍即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,m;
ll Daol[N],Daor[N];
struct Juli
{
ll Down,Up,Id;
inline bool operator<(const Juli &tmp)const
{
return Up>tmp.Up;
}
}Dis[N];
inline bool cmp_Juli(Juli p,Juli q)
{
return p.Down<q.Down;
}
priority_queue<Juli>heap;
struct Brg
{
ll Len;
int Id;
inline bool operator<(const Brg &tmp)const
{
return Len<tmp.Len;
}
}a[N];
int Ans[N];
int main()
{
int i;
R(n); R(m);
for(i=;i<=n;i++)
{
R(Daol[i]); R(Daor[i]);
if(i>) Dis[i-]=(Juli){Daol[i]-Daor[i-],Daor[i]-Daol[i-],i-};
}
sort(Dis+,Dis+n,cmp_Juli);
for(i=;i<=m;i++) a[i]=(Brg){read(),i};
sort(a+,a+m+);
int Now=,cnt=;
// for(i=1;i<n;i++) printf("%d %d\n",Dis[i].Down,Dis[i].Up);
// puts("--------------------------");
for(i=;i<=m;i++)
{
while(Now<n&&a[i].Len>=Dis[Now].Down&&a[i].Len<=Dis[Now].Up) heap.push(Dis[Now++]);
if(heap.empty()) continue;
Juli tmp=heap.top(); heap.pop();
// printf("%d %d %d\n",tmp.Down,tmp.Up,a[i].Len);
if(tmp.Up<a[i].Len) return puts("No"),;
cnt++; Ans[tmp.Id]=a[i].Id;
}
if(cnt<n-) return puts("No"),;
puts("Yes");
for(i=;i<n;i++) W(Ans[i]); puts("");
return ;
}
/*
Input
4 4
1 4
7 8
9 10
12 14
4 5 3 8
Output
Yes
2 3 1 Input
2 2
11 14
17 18
2 9
Output
No Input
2 1
1 1
1000000000000000000 1000000000000000000
999999999999999999
Output
Yes
1 Input
6 9
1 4
10 18
23 29
33 43
46 57
59 77
11 32 32 19 20 17 32 24 32
Output
Yes
1 6 4 5 8
*/

codeforces555B的更多相关文章

随机推荐

  1. Tomcat中的Host和Engine级别的servlet容器

    这边文章主要介绍的是Host容器 和 Engine容器.如果你想在同一个Tomcat上部署运行多个Context容器的话,你就需要使用Host容器,从理论上来讲,如果你的Tomcat只想要部署一个Co ...

  2. inline元素、block元素

    inline元素 不会独占一行,相邻的行内元素会排列在同一行内,直到一行排不下才会换行 高.行高.以及外边距和内边距不可改变 宽度就是它的文字或图片的宽度,不可改变,随元素内容变化而变化 内联元素只能 ...

  3. 导入java web项目时 web.xml第一行报错

    报错信息: Referenced file contains errors (http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd). For more infor ...

  4. arcgisJs之featureLayer中feature的获取

    arcgisJs之featureLayer中feature的获取 在featureLayer中source可以获取到一个Graphic数组,但是这个数组属于原数据数组.当使用 applyEdits修改 ...

  5. 高德地图API-设置考勤范围

    <template> <div class="page-setting-setgps"> <!--head--> <div class=& ...

  6. 移动端tab切换时下划线的滑动效果

    1.当前 tab 出现下划线的同时,前一个下划线同时消失(出现方向与消失方向保持一致),伴随过渡效果. <!DOCTYPE html><html lang="en" ...

  7. 创建LEANGOO账号

    转自:https://www.leangoo.com/leangoo_guide/leangoo_guide_login.html#toggle-id-2 Leangoo采用SaaS模式运行,通过邮箱 ...

  8. maven 父子工程打包 并且上传linux服务器

    先对父工程进行 mvn clean 再对子工程执行 install wagon:upload-single wagon:sshexec 使用wagon前提: 本地maven 的settings.xml ...

  9. python之判断和循环

    计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = : print ('your age i ...

  10. c++11 移动语义move semantics

    performance, expensive object copies move semantics, temporary objects implemented with rvalue refer ...