AtCoder Grand Contest 015 E - Mr.Aoki Incubator
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_e
题目大意:
数轴上有\(N\)个点,每个点初始时在位置\(X_i\),以\(V_i\)的速度向数轴正方向前进
初始时刻,你可以选择一些点为其染色,之后的行走过程中,染色的点会将其碰到的所有点都染上色,之后被染上色的点亦是如此
在所有\(2^N\)种初始染色方案中,问有多少种初始染色方案,能使得最终所有的点都被染色?答案对\(10^9+7\)取模
我们考虑按速度排序,对于每个点\(i\),我们找到最左边的\(L\)满足\(x_L\geqslant x_i\),找到最右边的\(R\)满足\(x_R\leqslant x_i\),那么\(i\)被染色后,\([L,R]\)都会被染色,而且我们可以得知,染色的区间不会互相包含
这样问题就转变为了由一堆区间覆盖线段的方案数,我们用单调队列优化DP即可
/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
#define min(x,y) (x<y?x:y)
#define max(x,y) (x>y?x:y)
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc(){
static char buf[1000000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
inline int frd(){
int x=0,f=1; char ch=gc();
for (;ch<'0'||ch>'9';ch=gc()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=gc()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline int read(){
int x=0,f=1; char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline void print(int x){
if (x<0) putchar('-'),x=-x;
if (x>9) print(x/10);
putchar(x%10+'0');
}
const int N=2e5,p=1e9+7;
struct S1{
int x,v;
void rd(){x=read(),v=read();}
bool operator <(const S1 &tis)const{return v<tis.v;}
}A[N+10];
struct S2{
int l,r;
void insert(int _l,int _r){l=_l,r=_r;}
bool operator <(const S2 &tis)const{return r!=tis.r?r<tis.r:l<tis.l;}
}v[N+10];
int stack[N+10],top;
int s[N+10],f[N+10];
int main(){
int n=read();
for (int i=1;i<=n;i++) A[i].rd();
sort(A+1,A+1+n);
for (int i=1;i<=n;i++){
if (!top||A[i].x>A[stack[top]].x) stack[++top]=i;
int l=1,r=top;
while (l<=r){
int mid=(l+r)>>1;
if (A[i].x<=A[stack[mid]].x) r=mid-1;
else l=mid+1;
}
v[i].l=stack[l];
}
top=0;
for (int i=n;i>=1;i--){
if (!top||A[i].x<A[stack[top]].x) stack[++top]=i;
int l=1,r=top;
while (l<=r){
int mid=(l+r)>>1;
if (A[stack[mid]].x<=A[i].x) r=mid-1;
else l=mid+1;
}
v[i].r=stack[l];
}
sort(v+1,v+1+n);
int now=1,Ans=0;
for (int i=1;i<=n;i++){
while (v[now].r<v[i].l-1) now++;
f[i]=(s[i-1]-s[now-1]+p)%p;
if (v[i].l==1) f[i]++;
if (v[i].r==n) Ans=(Ans+f[i])%p;
s[i]=(s[i-1]+f[i])%p;
}
printf("%d\n",Ans);
return 0;
}
AtCoder Grand Contest 015 E - Mr.Aoki Incubator的更多相关文章
- AtCoder Grand Contest 015
传送门 A - A+...+B Problem 题意:n个数最大值a,最小值b,求和的可能数量. #include<cstdio> #include<algorithm> us ...
- AGC 015 E - Mr.Aoki Incubator
E - Mr.Aoki Incubator 链接 题意: 数轴上有N个黑点,每个点都有一个方向向右的正速度v.当两个点在同一个位置上重合时,若其中一个是红色,另一个也变成红色.保证没有相同速度或初始坐 ...
- AtCoder Grand Contest 015 题解
A - A+...+B Problem 常识 Problem Statement Snuke has N integers. Among them, the smallest is A, and th ...
- AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...
- Atcoder Grand Contest 015 F - Kenus the Ancient Greek(找性质+乱搞)
洛谷题面传送门 & Atcoder 题面传送门 一道难度 Au 的 AGC F,虽然看过题解之后感觉并不复杂,但放在现场确实挺有挑战性的. 首先第一问很简单,只要每次尽量让"辗转相除 ...
- AtCoder Grand Contest 015题解
传送门 \(A\) 找到能达到的最大的和最小的,那么中间任意一个都可以被表示出来 typedef long long ll; int n,a,b;ll res; int main(){ scanf(& ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- AtCoder Grand Contest 011
AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
随机推荐
- 高仿美团iOS版,版本5.7
高仿美团iOS版,版本:5.7 iOS技术交流群:112365317 github链接:https://github.com/lookingstars/meituan 假设你认为不错.欢迎star 哦 ...
- Testng 运行报错:"Total tests run: 0, Failures: 0, Skips: 0"以及找不到class文件的问题
"Total tests run: 0, Failures: 0, Skips: 0" This means that there were no tests executed a ...
- 嵌入式开发之davinci--- 8168 question about capture PAL on 8168
http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/340483.aspx?pi199607=2
- sbt is a build tool for Scala, Java, and more
http://www.scala-sbt.org/0.13/docs/index.html sbt is a build tool for Scala, Java, and more. It requ ...
- Linux 内核源码中likely()和unlikely()【转】
本文转载自:http://blog.csdn.net/tigerjibo/article/details/8279183 ikely()与unlikely()在2.6内核中,随处可见,那为什么要用它们 ...
- HDU3045 Picnic Cows —— 斜率优化DP
题目链接:https://vjudge.net/problem/HDU-3045 Picnic Cows Time Limit: 8000/4000 MS (Java/Others) Memor ...
- POJ1077 Eight —— 反向BFS
主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 代码一:以数组充当队列,利用结构体中的pre追溯上一个状态在数组(队列)中的下标: #incl ...
- IDEA中使用git详细步骤
1.idea中配置git 设置 版本控制 git 配置git的执行路径(git.ext) 2.把项目推送到远程仓库(码云项目管理) a.在码云创建一个项目 b.复制项目的URL c.找到要上传到码云管 ...
- 使用masonry手写约束
在iOS开发过程中,手写contraints是非常痛苦的一件事情,往往那么一丢丢功能要写大量的代码,非常容易发生错误,并且非常不方便调试.所以只有在不得以的情况下才采用手工方式写contraints, ...
- 「LuoguP1281」 书的复制(贪心
Description 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. // 现在要把m本有顺序的书分给k给人 ...