AT4353-[ARC101D]Robots and Exits【LIS】
正题
题目链接:https://www.luogu.com.cn/problem/AT4353
题目大意
数轴上有\(n\)个球\(m\)个洞,每次可以将所有球左移或者右移,球到洞的位置会掉下去。
求有多少让球掉进不同洞的方案。
\(1\leq n,m\leq 10^5\)
解题思路
设一个球距离左右洞的距离分别为\((x,y)\),那么一个球\((x_1,y_1)\)对球\((x_2,y_2)\)产生限制当且仅当\(x_1\leq x_2\)且\(y_1\geq y_2\)。
那么我们相当于找一些两两没有限制的数字的集合,一种方法是按照\(x\)升序排序,然后求\(y\)的上升序列数量即可。
时间复杂度\(O(n\log n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
using namespace std;
const ll N=1e5+10,P=1e9+7;
ll n,m,cnt,bnt,b[N],x[N],y[N],t[N],ans;
pair<ll ,ll >a[N];
void Change(ll x,ll val){
while(x<=n){
(t[x]+=val)%=P;
x+=lowbit(x);
}
return;
}
ll Ask(ll x){
ll ans=0;
while(x){
(ans+=t[x])%=P;
x-=lowbit(x);
}
return ans;
}
signed main()
{
freopen("hole.in","r",stdin);
freopen("hole.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++)scanf("%lld",&x[i]);
for(ll i=1;i<=m;i++)scanf("%lld",&y[i]);
ll z=1;
for(ll i=1;i<=n;i++){
while(z<=m&&y[z]<x[i])z++;
if(z==1||z>m||y[z]==x[i])continue;
a[++cnt]=mp(x[i]-y[z-1],x[i]-y[z]);
b[++bnt]=y[z]-x[i];
}
sort(a+1,a+1+cnt);
b[++bnt]=0;sort(b+1,b+1+bnt);
cnt=unique(a+1,a+1+cnt)-a-1;
bnt=unique(b+1,b+1+bnt)-b-1;
Change(1,1);ans=1;
for(ll i=1;i<=cnt;i++){
ll w=lower_bound(b+1,b+1+bnt,-a[i].second)-b;;
ll sum=Ask(w-1);Change(w,sum);
(ans+=sum)%=P;
}
printf("%lld\n",ans);
return 0;
}
AT4353-[ARC101D]Robots and Exits【LIS】的更多相关文章
- 【58测试】【贪心】【离散】【搜索】【LIS】【dp】
第一题 大天使之剑 大意: 有n个怪,每个怪的ph 为 h[i],有三种攻击方式,普通攻击:一次打一个怪一滴血:重击(消耗1魔法值):一次打一个怪两滴血:群体攻击(消耗1魔法值):一次打所有怪一滴血. ...
- HDU 1025 城市供应 【LIS】
题目链接:https://vjudge.net/contest/228455#problem/A 题目大意: 有2n个城市,其中有n个富有的城市,n个贫穷的城市,其中富有的城市只在一种资源富有,且富有 ...
- 【LIS】【递推】Gym - 101246H - ``North-East''
x坐标排序,y坐标当权值,同一个x坐标的,y从大到小排. 求f(i)表示以i结尾的LIS以后,从后向前枚举,不断更新一个max数组,max(i)代表最长上升子序列为i时,当前的 结尾的最大值是多少. ...
- 【LIS】Luogu P1020 导弹拦截
昨天晚上看蓝书,看到了LIS问题的优化解法. 是比O(n方)更快的解法,实际上是一个常数优化. 先讲一下朴素的解法: 一个集合a,a[i]是第i个元素.设dp[i]为以编号为i的元素结尾的最长不上升子 ...
- HDU 1257 最少拦截系统【LIS】
题意:类似于套娃娃,问最少需要多少个拦截系统. 思路: 假设已经有m个导弹拦截序列 r1:x11>=x12>=x13>=...>=x1n r1:x21>=x22>= ...
- HDU 1051 Wooden Sticks【LIS】
题意:给出n个木头的重量wi,长度li,如果满足w[i+1]>=w[i]且l[i+1]>=l[i],则不用耗费另外的加工时间,问至少需要多长时间加工完这些木头. 第一次做这一题目也没有做出 ...
- hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】
Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 序列变换(HDU-5256)【LIS】
题目链接:https://vjudge.net/problem/HDU-5256 题意:给一个数列,每一个数都不相同且为整数,现求,最少需要修改多少次才能使该数列为严格上升的. 思路:首先,对于一个严 ...
- POJ_2533 Longest Ordered Subsequence 【LIS】
一.题目 Longest Ordered Subsequence 二.分析 动态规划里的经典问题.重在DP思维. 如果用最原始的DP思想做,状态转移方程为$DP[i] = max(DP[j] + 1) ...
随机推荐
- jquery 操作checkbox是否选中的正确方法
对于checkbox,若要选中,需要用jquery的prop()方法,不要用attr(). <input type="checkbox" id="slide_che ...
- C#多线程---I/O线程实现异步请求
一.场景 利用I/O线程来模拟浏览器对服务器请求的异步操作. 二.例子 1 using System; 2 using System.Collections.Generic; 3 using Syst ...
- C# 启动 Flask for Python
概览 最近有个需求是通过c#代码来启动 python 脚本.嘿~嘿!!! 突发奇想~~既然可以启动 python 脚本,那也能启动 flask,于是开始着手操作. 先看gif图 准备 因为使用的是.N ...
- SpringBoot快速搭建流程
创建一个新项目 使用maven创建一个新项目 给定项目名称.finsh完成创建 跑起来SpringBoot 引入依赖parent > SpringBoot父级依赖,spring-boot-sta ...
- springmvc框架(Spring SpringMVC, Hibernate整合)
直接干货 model 考虑给用户展示什么.关注支撑业务的信息构成.构建成模型. control 调用业务逻辑产生合适的数据以及传递数据给视图用于呈献: view怎样对数据进行布局,以一种优美的方式展示 ...
- mzy git学习,删除文件(三)
删除一个文件(工作区删除,并且在本地版本库中也删除) 第一种方式: rm test.txt 先删除工作区的test.txt git add test.txt (我的理解是,将删除test.txt这个动 ...
- C++、Java、Python、Linux、Go、前端、算法,慕课资料分享
C++.Java.Python.Linux.Go.前端.算法,慕课资料分享 微信公众号:大道同行JAVA 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 又见面了.废话不多说,最近多了一些在 ...
- SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化。
一.基础原理 Base64是一种用64个Ascii字符来表示任意二进制数据的方法.主要用于将不可打印的字符转换成可打印字符,或者简单的说是将二进制数据编码成Ascii字符.Base64也是网络 ...
- noip模拟测试50
考试过程:开题顺序1,2,3,做T1的时候我想到了要求的东西,就是分成尽量少的段使得每段之和>=k,但是我不会求,就打了个暴力走了,然后看T2,这题我觉得和之前做过的一道题比较像,因为我觉得\( ...
- 快速模式第二包: quick_inI1_ouR1()
文章目录 1. 序言 2. quick_inI1_outR1()流程图 3. 快速模式消息②数据包格式 4. 源码分析 4.1 quick_inI1_outR1() 4.2 quick_inI1_ou ...