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) ...
随机推荐
- 0x800b010a 证书
无论是装微软的什么应用,只要报这个错误,下载这个证书: http://download.microsoft.com/download/2/4/8/248D8A62-FCCD-475C-85E7-6ED ...
- 安全|常见的Web攻击手段之CSRF攻击
对于常规的Web攻击手段,如XSS.CRSF.SQL注入.(常规的不包括文件上传漏洞.DDoS攻击)等,防范措施相对来说比较容易,对症下药即可,比如XSS的防范需要转义掉输入的尖括号,防止CRSF攻击 ...
- C#序列化和反序列化 之 dynamic 动态Json的反序列化
序列化和反序列化的常识不再赘述,如果不清楚这个,可以 参考一下其他人写的文章https://www.cnblogs.com/maitian-lf/p/3670570.html 总结的说, 序列化 是把 ...
- java实用资料
1.怎么构造一个线程安全的hashmap?用reentrantreadwritelock2.线程是怎么处理二个以上的对象同时处理一个全局变量 3.读文件为啥不用字符流 4.请求鉴定,各种错误码502- ...
- 【转】Mysql中事务ACID实现原理
转自:https://www.cnblogs.com/rjzheng/p/10841031.html 作者:孤独烟 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" ...
- Java程序设计学习笔记(六) — 网络编程
时间:2016-5-8 02:03 --网络编程 网络传输实际上就是进行数据传输. 一.传输的步骤: 1.对对方IP地址进行定位. 2.将数据打包发送到 ...
- 1TB是多大?
TB是计算机的存储单位,用来描述计算机的存储容量.另外还有GB.MB.KB.B.就像长度单位米.分米.厘米.毫米一样,它们之间有换算关系: 1KB = 1024B 1M = 1024KB 1GB = ...
- vscode Markdown Preview Enhanced 安装配置
打开VSCode 打开Externsion,可通过Ctrl+Shift+X 选中 Markdown Preview Enhanced并install即可 配置Preview风格: Magage -&g ...
- Android常见面试题(一)
ANDROID(一) Activity 1.什么是Activity? 请描述一下生命周期 Activity: 一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例 ...
- Photoshop 批量修改图像大小