AGC 015 E - Mr.Aoki Incubator
E - Mr.Aoki Incubator
题意:
数轴上有N个黑点,每个点都有一个方向向右的正速度v。当两个点在同一个位置上重合时,若其中一个是红色,另一个也变成红色。保证没有相同速度或初始坐标。现问你有多少方法染红一些点,使得无穷久后所有点都被染红。 N≤200000
分析:
首先按照速度v从大到小排序,对于一个点,它左边的点中,坐标x第一个比它的坐标小的,设为L;右边的点中,坐标最后一个比它的坐标大的,设为R。
那么如果这个点被染色,R-L+1区间的点都将被染色,预处理出每个点对应的区间。问题变成选一些区间,覆盖1到n的问题,dp一下。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = , mod = 1e9 + ;
int F[N], sum[N], mn[N], mx[N];
struct Edge{ int v, l, r, x; } A[N];
bool cmp1(const Edge &A,const Edge &B) { return A.v > B.v; }
bool cmp2(const Edge &A,const Edge &B) { return A.l == B.l ? A.r < B.r : A.l < B.l; } // 左端点相同时的排序!!! int main() {
int n = read();
for (int i = ; i <= n; ++i)
A[i].x = read(), A[i].v = read();
sort(A + , A + n + , cmp1); mn[] = A[].x;
for (int i = ; i <= n; ++i) mn[i] = min(mn[i - ], A[i].x);
for (int i = ; i <= n; ++i) {
int l = , r = i - , p = i;
while (l <= r) {
int mid = (l + r) >> ;
if (mn[mid] < A[i].x) p = mid, r = mid - ;
else l = mid + ;
}
A[i].l = p;
}
mx[n] = A[n].x;
for (int i = n - ; i >= ; --i) mx[i] = max(mx[i + ], A[i].x);
for (int i = n; i >= ; --i) {
int l = i + , r = n, p = i;
while (l <= r) {
int mid = (l + r) >> ;
if (mx[mid] > A[i].x) p = mid, l = mid + ;
else r = mid - ;
}
A[i].r = p;
}
sort(A + , A + n + , cmp2);
int p = , Ans = ;
for (int i = ; i <= n; ++i) {
while (A[p].r < A[i].l - )
p ++;
F[i] = (sum[i - ] - sum[p - ] + mod) % mod;
if (A[i].l == ) F[i] = (F[i] + ) % mod;
sum[i] = (sum[i - ] + F[i]) % mod;
if (A[i].r == n) Ans = (Ans + F[i]) % mod;
}
cout << Ans;
return ;
}
AGC 015 E - Mr.Aoki Incubator的更多相关文章
- AtCoder Grand Contest 015 E - Mr.Aoki Incubator
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_e 题目大意: 数轴上有\(N\)个点,每个点初始时在位置\(X_i\),以\(V_i\)的速 ...
- 【AGC015E】Mr.Aoki Incubator DP
题目描述 数轴上有\(n\)个人,每个人的位置是\(x_i\),速度是\(v_i\). 最开始有一些人感染了传染病. 如果某一时刻一个正常人和一个被感染的人处于同一位置,那么这个正常人也会被感染. 问 ...
- agc015E - Mr.Aoki Incubator(dp)
题意 题目链接 平面上有$n$个点,每个点都有一个位置$x_i$,和向右的速度$v_i$ 现在要求你对其中的一些点进行染色,当一个点被染色后,在无限距离内与它相遇的点也会被染色 问在可能的$2^n$种 ...
- AGC015E Mr.Aoki Incubator
atcoder luogu 首先可以考虑给一个人\(A\)染色.其他人被染色,要么被本来在后面的速度更快的人染色,要么被在前面的更慢的人染色.然后假设一个速度比最开始那个人慢的人\(B\)最后被染色了 ...
- 做题记录 To 2019.2.13
2019-01-18 4543: [POI2014]Hotel加强版:长链剖分+树形dp. 3653: 谈笑风生:dfs序+主席树. POJ 3678 Katu Puzzle:2-sat问题,给n个变 ...
- AtCoder Grand Contest 015
传送门 A - A+...+B Problem 题意:n个数最大值a,最小值b,求和的可能数量. #include<cstdio> #include<algorithm> us ...
- AtCoder Grand Contest 015 题解
A - A+...+B Problem 常识 Problem Statement Snuke has N integers. Among them, the smallest is A, and th ...
- 【AtCoder】AGC015
AGC015 A - A+...+B Problem #include <bits/stdc++.h> #define fi first #define se second #define ...
- Atcoder训练计划
争取三天做完一套吧,太简单的就写一句话题解吧(其实也没多少会做的). 自己做出来的在前面用*标记 agc007 *A - Shik and Stone 暴力dfs即可,直接判断个数 *B - Cons ...
随机推荐
- mysqlbinlog usage
[root@localhost mysql3306]# mysqlbinlogmysqlbinlog Ver 3.4 for el7 at x86_64Copyright (c) 2000, 2018 ...
- 关于 svn
文章:http://www.cnblogs.com/xing901022/p/4403339.html 视频http://www.imooc.com/learn/109 7******* ...
- MongoDB 多实例安装成服务
转发自:https://www.cnblogs.com/GainLoss/p/6906937.html 1.在mongodb的官网上下载安装包 https://www.mongodb.com/down ...
- codeforces 547E Mike and Friends
codeforces 547E Mike and Friends 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define ...
- SVN那些事
非原创,引用于青松世界博客,最近在使用svn,因为方便复制内容在这查看.原地址 https://www.cnblogs.com/Rambo635755402/p/5549447.html Totois ...
- AbstractApplicationContext 笔记
一.这个类的属性 public abstract class AbstractApplicationContext extends DefaultResourceLoader implements C ...
- performSelector 多参调用的实现方案
1.nsinvocation封装: 2.msg_send封装: 第二种方案是系统的原生封装.
- P3935 Calculating
题目描述 若xx分解质因数结果为\(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}\),令\(f(x)=(k_1+1)(k_2+1)\cdots (k_n+1)\),求\(\ ...
- 怎样批量提取JPG照片的文件名
用批处理做吧, @echo off dir /a-d /b >./list.txt 把上面两句代码用记事本保存为“list.bat”(不要引号) 然后把这个文件放到你要提取文件名的文件夹里,就是 ...
- ethereumjs/ethereumjs-account-2-test
ethereumjs-account/test/index.js const Account = require('../index.js') const tape = require('tape') ...