AGC015E Mr.Aoki Incubator

news/2025/10/1 20:36:41/文章来源:https://www.cnblogs.com/Water-M/p/19122823

题意:数轴上有 \(n\) 个人,在 \(x_i\) 处的人以 \(v_i\) 的速度朝正方向匀速运动。初始有某些人携带病毒,当某一时刻两个人相遇时,若其中一个人携带病毒,就会传染给另外一个人。求所有的 \(2^n\) 种初始携带病毒的情况中,使得充分长的时间后,所有人都携带病毒的方案数。对 \(10^9+7\) 取模。

\(n \le 2 \times 10 ^5,1 \le x_i,v_i \le 10^9\),且不存在 \(i\ne j\) 使得 \(x_i=x_j\)\(v_i=v_j\)

显然充分长的时间后,所有人的相对顺序是按照 \(v_i\) 升序排列。
后文的 \(v,x\) 都是指排序后的结果。

然后这道题的灵魂是,若第 \(i\) 个人初始携带病毒,则他会传染给一段区间内的人。这一段区间 \([l_i,r_i]\) 有,\(l_i\)\(i\) 前面最小的 \(j\),使得 \(x_j > x_i\)\(r_i\)\(i\) 后面最大的 \(j\),使得 \(x_j < x_i\)

证明的话,感性理解就是画个图。举个例子:

这里 \(x_i=3\)\(l\) 值就是 \(1\)。中间是会存在间接感染的!
然后 \(>l_i\) 的都会被间接感染,\(<l_i\) 的都不会被间接感染。

然后原问题就转化成了,在 \(n\) 个区间 \([l_i,r_i]\) 中选择任意个,使得 \([1, n]\) 都被覆盖。

还有一个性质,就是这 \(l_i,r_i\) 都随 \(x_i\) 的增大而不降!转移的时候就不需要顾虑太多。
接下来随便 DP。树状数组优化转移做到 \(O(n \log n)\)

#include <bits/stdc++.h>
using namespace std;// #define filename "virus"
#define FileOperations() freopen(filename".in", "r", stdin), freopen(filename".out", "w", stdout)
//#define multi_cases 1#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
#define pii pair<int, int> 
#define ull unsigned long long
#define all(v) v.begin(), v.end()
#define upw(i, a, b) for(int i = (a); i <= (b); ++i)
#define dnw(i, a, b) for(int i = (a); i >= (b); --i)template<class T> bool vmax(T &a, T b) { return b > a ? a = b, true : false; }
template<class T> bool vmin(T &a, T b) { return b < a ? a = b, true : false; }
template<class T> void clear(T &x) { T().swap(x); }const int N = 2e5+2;const int P = 1000000007;
void vadd(int &a, int b) { a += b; if(a >= P) a -= P; }int n;
pii a[N];struct minBIT {int n;vector<int> c;void init(int n) { this->n = n, clear(c), c.resize(n+5, inf);}void update(int idx, int v) { for(; idx <= n; idx += idx & -idx) vmin(c[idx], v); }int query(int idx) {int res = inf;for(; idx; idx -= idx & -idx) vmin(res, c[idx]);return res;}
};int l[N], r[N];vector<int> range[N];struct BIT {int n;vector<int> c;void init(int n) { this->n = n, clear(c), c.resize(n+5); }void add(int idx, int v) { for(++idx; idx <= n; idx += idx & -idx) vadd(c[idx], v); }int query(int idx) {int res = 0;for(++idx; idx; idx -= idx & -idx) vadd(res, c[idx]);return res;}
} f;void WaterM() {cin >> n;vector<int> vx{-1};upw(i, 1, n) scanf("%d%d", &a[i].first, &a[i].second);sort(a+1, a+n+1, [&] (pii a, pii b) { return a.second < b.second; });upw(i, 1, n) vx.push_back(a[i].first);sort(all(vx)), vx.erase(unique(all(vx)), vx.end());upw(i, 1, n) a[i].first = lower_bound(all(vx), a[i].first) - vx.begin();minBIT tr;tr.init(n);upw(i, 1, n) {tr.update(n - a[i].first + 1, i);l[i] = tr.query(n - a[i].first + 1);}tr.init(n);dnw(i, n, 1) {tr.update(a[i].first, n-i+1);r[i] = n-tr.query(a[i].first)+1;}upw(i, 1, n) range[r[i]].push_back(l[i]);upw(i, 1, n) sort(all(range[i]), greater<int>());//此时l,r都随x[i]的增大单调不降,故没有包含关系,不需要顾虑太多f.init(n+2);f.add(0, 1);int ans = 0;upw(i, 1, n) {int prod = 1, contrib = 0;for(auto l : range[i]) {// int sum = 0;// upw(j, l-1, i-1) vadd(sum, f[j]);vadd(contrib, 1ll * prod * (f.query(i-1) - f.query(l-2) + P) % P);prod = 2ll * prod % P;}f.add(i, contrib), ans = contrib;}cout << ans << '\n';
}signed main() {
#ifdef filenameFileOperations();
#endifsigned _ = 1;
#ifdef multi_casesscanf("%d", &_);
#endifwhile(_--) WaterM();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZooKeeper与Kafka分布式:从基础原理到集群部署 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

天津网站备案时间微信小店

一 、SQL的特点1.综合统一&#xff1a;SQL集数据定义语言DDL、数据控制语言DCL的功能于一体&#xff0c;语言风格统一&#xff0c;可以独立完成数据库生 命周期中的全部活动(定义关系模式&#xff0c;插入数据&#xff0c;建立数据库&#xff1b;对数据库中的数据进 行查询和更…

2025 年臭氧发生器厂家 TOP 实力工厂推荐榜单排名,大中型 / 水处理 / 多功能臭氧发生器推荐这十家公司!

引言在当前环保意识日益提升的背景下,臭氧发生器作为水处理、废气处理等领域的关键设备,其市场需求持续增长。然而,行业发展也面临着诸多问题。一方面,部分生产厂家技术水平参差不齐,产品质量难以保证,存在臭氧产…

上海高端网站开发公安邦消防安全技术服务有限公司

Hive是一个数据仓库基础的应用工具&#xff0c;在Hadoop中用来处理结构化数据&#xff0c;它架构在Hadoop之上&#xff0c;通过SQL来对数据进行操作&#xff0c;了解SQL的人&#xff0c;学起来毫不费力。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型&#xff0c;…

2025 年望远镜厂家 TOP 企业品牌推荐排行榜,助你精准选购性价比高的望远镜推荐这十家公司!

引言在当前的望远镜市场中,消费者面临着诸多选择难题。随着户外活动、天文观测等需求的不断增长,望远镜的市场需求日益扩大,但市场上的产品质量却参差不齐。部分品牌为了追求短期利益,在生产过程中偷工减料,导致产…

地旺建设官方网站wordpress后台乱码

DNS&#xff1a;因特网的目录服务 在因特网上&#xff0c;主机和人类都一样&#xff0c;可以用很多种方式进行标识&#xff0c;主机的一种标识方法是它的主机名。 但是主机名一般是用IP来表示&#xff0c;IP是由四个字节组成&#xff0c;并且有严格的层次结构&#xff0c;不利…

Coze源码分析-资源库-删除数据库-后端源码-安全与错误处理 - 详解

Coze源码分析-资源库-删除数据库-后端源码-安全与错误处理 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

wordpress新建网站注册监理工程师注册查询系统

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 进阶: 如果你已经实现…

动手动脑实验性问题总结

动手动脑1 使用算法生成随机整数 使用 System.nanoTime() 作为初始种子,确保每次运行生成不同的随机序列。 必须校验输入参数(如 count > 0),避免无效调用。实现简单、计算高效,适合对随机性要求不高的场景 动…

揭阳网站制作托管苏州网站建设caiyiduo

一、Bootstrap弹出框使用过JQuery UI应该知道&#xff0c;它里面有一个dialog的弹出框组件&#xff0c;功能也很丰富。与jQuery UI的dialog类似&#xff0c;Bootstrap里面也内置了弹出框组件。打开bootstrap 文档可以看到它的dialog是直接嵌入到bootstrap.js和bootstrap.css里面…

火锅网站建设家政服务网站建设方案

单例模式&#xff0c;是设计模式的一种。 在计算机这个圈子中&#xff0c;大佬们针对一些典型的场景&#xff0c;给出了一些典型的解决方案。 目录 单例模式 饿汉模式 懒汉模式 线程安全 单例模式 单例模式又可以理解为是单个实例&#xff08;对象&#xff09; 在有些场…

链表实现双端队列

链表实现双端队列定义链表class ListNode: def __init__(self, value): self.val = value # 节点存储的值 self.prev = None # 指向前一个节点的指针 self.next = None # 指向后一个节点的指针定义双端队列clas…

专门做朋友圈小视频的网站网站怎么做404

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快&#xff1a;PHP是一种强大的CGI脚本语言&#xff0c;语法混合了C、Java、Perl和PHP式的新语法&#xff0c;执行网页比CGI、Perl和ASP更快&#xff0c;这是它的第一个突出的特点。 (推荐学习&#xff1a;PHP视频教程…

怎么做58同城网站西安英文旅游网站建设

本文实例讲述了Java模拟计算机的整数乘积计算功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;计算机计算整数乘积的原理&#xff1a;实现代码&#xff1a;package math;public class two {/*** Fundamental method* f(n) O(n^2)* param a* param b* return*/publ…

网站建设开发制作免费游戏网站制作

哈喽小伙伴们大家好,本系列是一个专门针对前端开发岗的面试题系列,每周将会不定期分享一些面试题,希望对大家有所帮助. 面试官:token 一般在客户端存在哪儿 求职者:Token一般在客户端存在以下几个地方&#xff1a; (1)Cookie&#xff1a;Token可以存储在客户端的Cookie中。服…

深入解析:数字和字节:Linux 中的内存如何工作?

深入解析:数字和字节:Linux 中的内存如何工作?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

FFmpeg和ZLMediaKit 实现本地视频推流

目录1 本地视频推流1.1 简介1.1.1 FFmpeg1.1.2 ZLMediaKit1.2 环境准备1.2.1 ZLMediaKit 安装配置1.2.2 FFmpeg 安装(可选)1.3 整合1.3.1 pom和配置1.3.2 推流配置类1.3.3 推流服务类1.3.4 前端部分 1 本地视频推流 …

SQL 多表查询速查:JOIN、子查询一文全掌握 - 详解

SQL 多表查询速查:JOIN、子查询一文全掌握 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

MySQL复合查询(重点) - 详解

MySQL复合查询(重点) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

网站备案期间可以建站荣欣建设集团有限公司网站

目录 1.应用场景2.类似的数据同步工具3.DataX 与 Canal 有什么区别 DataX是阿里巴巴开源的一款数据同步工具&#xff0c;使用Java语言开发的。它提供了从各类数据源读取数据以及向各类数据源写入数据的功能&#xff0c;支持包括MySQL、Oracle、SQLServer、PostgreSQL、HDFS、HB…