[atARC101F]Robots and Exits
每一个点一定匹配其左边/右边的第一个出口(在最左/右边的出口左/右边的点直接删除即可),否则记到左右出口的距离分别为$x_{i}$和$y_{i}$
令$p_{i}$表示$i$匹配的出口(左0右1),结论:存在不合法当且仅当$p_{i}=0$、$p_{j}=1$、$x_{i}\ge x_{j}$且$y_{i}\le y_{j}$
充分性显然,考虑必要性,我们每一次所能做的就是删除最小的$x_{i}$(相同都要删除)且这些$x_{i}$的$p_{i}=0$或删除最小的$y_{i}$且这些$y_{i}$的$p_{i}=1$
如果能够不断删除,每一次至少删除1个,因此一定可以删除完(即合法),那么考虑当不能删除,令$j$为最小的$x_{i}$中某一个$p_{i}=1$($i$类似)
此时有$p_{i}=0$、$p_{j}=1$、$x_{i}\ge x_{j}$($j$是最小值)且$y_{i}\le y_{j}$,因此若不存在这种情况,一定可以不断删除,即必要性成立
先将所有位置按照$x_{i}$从小到大排序(相同$y_{i}$从大到小),即对于所有为$p_{i}=1$的位置,需要保证其之后($x_{i}$比其大)所有$y_{i}$小于等于它的位置都要选
(这里有一个小问题,就是当$x_{i}$和$y_{i}$都相同,那么对于排在后面,其前面与其相同的也会影响他,由于这两个点状态必然相同,不妨删去1个)
答案可以看作任选若干个位置$p_{i}=1$使得合法的方案数,实际上强制选择等价于强制不选(因为这些位置选择再对其之后的影响一定包含在$i$中),所以也可以理解为统计最长上升子序列的个数
考虑dp,令$f[i]$表示以$i$为结尾的最长上升子序列个数,线段树维护转移即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define mod 1000000007
5 #define mid (l+r>>1)
6 pair<int,int>c[N];
7 int V,r,n,m,t,ans,a[N],b[N],f[N*30],ls[N*30],rs[N*30];
8 void update(int &k,int l,int r,int x,int y){
9 if (!k)k=++V;
10 f[k]=(f[k]+y)%mod;
11 if (l==r)return;
12 if (x<=mid)update(ls[k],l,mid,x,y);
13 else update(rs[k],mid+1,r,x,y);
14 }
15 int query(int k,int l,int r,int x,int y){
16 if ((!k)||(l>y)||(x>r))return 0;
17 if ((x<=l)&&(r<=y))return f[k];
18 return (query(ls[k],l,mid,x,y)+query(rs[k],mid+1,r,x,y))%mod;
19 }
20 int main(){
21 scanf("%d%d",&n,&m);
22 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
23 for(int i=1;i<=m;i++)scanf("%d",&b[i]);
24 for(int i=1;i<=n;i++){
25 if ((a[i]<b[1])||(a[i]>b[m]))continue;
26 int x=lower_bound(b+1,b+m+1,a[i])-b;
27 c[++t]=make_pair(a[i]-b[x-1],-(b[x]-a[i]));
28 }
29 sort(c+1,c+t+1);
30 ans=1;
31 update(r,0,1e9,0,1);
32 for(int i=1;i<=t;i++){
33 if ((i)&&(c[i-1]==c[i]))continue;
34 int s=query(r,0,1e9,0,-c[i].second-1);
35 ans=(ans+s)%mod;
36 update(r,0,1e9,-c[i].second,s);
37 }
38 printf("%d",ans);
39 }
[atARC101F]Robots and Exits的更多相关文章
- 【ARC101F】Robots and Exits 树状数组优化DP
ARC101F Robots and Exits 树状数组 有 $ n $ 个机器人和 $ m $ 个出口.这 $ n $ 个机器人的初始位置是 $ a_1,a_2.....a_n $ ,这 $ m ...
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
- 【ARC101F】Robots and Exits 树状数组
题目大意 有 \(n\) 个机器人和 \(m\) 个出口. 这 \(n\) 个机器人的初始位置是 \(a_1,a_2,\ldots,a_n\),这 \(m\) 个出口的位置是 \(b_1,b_2,\l ...
- AT4353-[ARC101D]Robots and Exits【LIS】
正题 题目链接:https://www.luogu.com.cn/problem/AT4353 题目大意 数轴上有\(n\)个球\(m\)个洞,每次可以将所有球左移或者右移,球到洞的位置会掉下去. 求 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Atcoder 乱做
最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...
- 【AtCoder】ARC101题解
C - Candles 题解 点燃的一定是连续的一段,枚举左端点即可 代码 #include <bits/stdc++.h> #define enter putchar('\n') #de ...
- 【arc101】比赛记录
这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了.(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录. C - Candles 这题是一道一眼题,花 ...
- 网站 robots.txt 文件编写
网站 robots.txt 文件编写 Intro robots.txt 是网站根目录下的一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的 ...
随机推荐
- Python小知识之对象的比较
好久不见 国庆回了趟老家,躺平了10天.作息时间基本和小学生差不多,8.9点就睡了, 那滋味别提多舒服了.时间也和小时候过得一样慢了...长时间不更新,还是不行滴,粉都快掉没了. 今天就结合日常生活的 ...
- InstallSheild相关
一.关于使用InstallSheild制作安装包的总结. 1.定制化制作需要了解InstallScript语法,相关资料可以去网上查找,后续提供比较好的资料. 2.有些软件运行是需要一些环境的,譬如使 ...
- 【转】简述C和C++的学习历程
简述C和C++的学习历程(转) --by:肖舸老师总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复. 一家之言,欢迎拍砖哈. 1.可以考虑先学习C. 大多数时候 ...
- vue3.x相对于vue2.x生命周期改动
vue3.x已经正式发布了,部分小伙伴已经用了vue3.x开发,部分小伙伴还在观望中,下面是两个影响比较大的改动 1.beforeDestroy和destroyed不能用了. 这个应该是vue2.x项 ...
- Noip模拟78 2021.10.16
这次时间分配还是非常合理的,但可惜的是$T4$没开$\textit{long long}$挂了$20$ 但是$Arbiter$上赏了蒟蒻$20$分,就非常不错~~~ T1 F 直接拿暴力水就可以过,数 ...
- 鸿蒙轻内核M核的故障管家:Fault异常处理
摘要:本文先简单介绍下Fault异常类型,向量表及其代码,异常处理C语言程序,然后详细分析下异常处理汇编函数实现代码. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十八 Fault异常处理& ...
- Codeforces Round #742 (Div. 2)题解
链接 \(A,B\)题签到,就完了. \(C\)题,考虑进位时多进一位,由于是隔一位进的,所以可以发现奇数位和偶数位是相互独立的,那么我们就把奇数位和偶数位单独拉出来组成数字例如:34789,我们单独 ...
- cf13A Numbers(,,)
题意: Little Petya likes numbers a lot. He found that number 123 in base 16 consists of two digits: th ...
- hdu 1078 FatMouse and Cheese(记忆搜)
N*N的矩阵,每个格子上有一个值. 老鼠起始在(1,1),每次只能水平着走或垂直着走.且最多只能走K步.且走到的格子里的值必须比上一次呆的格子里的值大. 问老鼠最多收集到多少值. 思路: 记忆搜好写. ...
- Docker容器间网络互联原理,讲不明白算我输....
@ 目录 一.今天我们要搞明白的实验 二.前置网络知识 2.1.docker默认为我们创建的网络 2.2.怎么理解docker0网桥 2.3.什么是veth-pair技术? 三.同一个局域网中不同主机 ...