CF494C Helping People

news/2025/9/21 21:28:33/文章来源:https://www.cnblogs.com/Avis-D/p/19104207

CF494C Helping People

看到保证区间不会交错,没想出来这个性质是干什么的,看了题解才知道,这说明区间之间只会互相包含。

那么我们就可以为每个区间指定一个 \(fa\) 区间来代表最小的包含它的区间,不难发现这构成了森林!

更妙的是,当我们加入一个 \(l=1,r=n,p=0\) 的区间,表示这个区间覆盖了整个数组,并且不可能有加一的机会时,你发现这个区间加入后对答案没有一点影响,而且它可以包含其他所有区间,所以森林又可以变成树了!

把区间问题转化成树上问题,因为一个区间最后的最大值一定不超过原来的最大值加上执行的区间的次数,也就是不超过原来的最大值加上 \(q\),所以我们可以设计一个 \(dp[u][i]\) 表示区间 \(u\) 为根的子树里区间被执行后最大值 \(\le\) 原来的最大值 \(+i\) 的概率,最后的答案就可以通过 \(dp[1]\) 求出了。表示 \(\le\) 是为了让转移更方便,最后我们也可以让 \(dp[1][i]\) 减去 \(dp[1][i-1]\) 来算出等于的概率。

如何转移呢?显然我们要保证区间内所有的子区间操作后的最大值也 \(\le\) 原来的最大值 \(+i\),所以

\[dp[u][i]=p[i]\Pi dp[v][i+maxn[u]-maxn[v]-1]+(1-p[i])\Pi dp[v][i+maxn[u]-maxn[v]] \]

其中 \(maxn[u]\) 代表 \(u\) 这个区间原来的最大值。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=5e3+10;
struct node{int l,r;double p;
}q[N];
bool cmp(node x,node y){return x.l^y.l?x.l<y.l:x.r>y.r;}
int n,m,tot=1,a[N],st[N],maxn[N],lo[N],f[N][25];
vector<int>e[M];
double dp[M][M],ans;
int query(int l,int r)
{int s=lo[r-l+1];return max(f[l][s],f[r-(1<<s)+1][s]);
}
void dfs(int u)
{for(int v:e[u])dfs(v);for(int i=0;i<=m;i++){double s1=1,s2=1;if(!i)s1=0;for(int v:e[u]){if(i){if(i-1+maxn[u]-maxn[v]<=m)s1*=dp[v][i-1+maxn[u]-maxn[v]];}if(i+maxn[u]-maxn[v]<=m)s2*=dp[v][i+maxn[u]-maxn[v]];}dp[u][i]=s1*q[u].p+s2*(1-q[u].p);}return;
}
int main()
{for(int i=2;i<=N-10;i++)lo[i]=lo[i>>1]+1;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]),f[i][0]=a[i];for(int j=1;j<=20;j++)for(int i=1;i+(1<<j)-1<=n;i++)f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);for(int i=1;i<=m;i++)scanf("%d%d%lf",&q[i].l,&q[i].r,&q[i].p);q[++m]={1,n,0};sort(q+1,q+1+m,cmp),st[1]=1,maxn[1]=query(1,n);for(int i=2;i<=m;i++){while(q[st[tot]].r<q[i].l)tot--;maxn[i]=query(q[i].l,q[i].r),e[st[tot]].push_back(i),st[++tot]=i;}dfs(1);for(int i=m;i>=1;i--)dp[1][i]-=dp[1][i-1];for(int i=0;i<=m;i++)ans+=dp[1][i]*(maxn[1]+i);printf("%lf",ans);return 0;
}

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

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

相关文章

深入解析:Extract Chart Data Directly to Excel

深入解析:Extract Chart Data Directly to Excelpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

AOSP Android12 Source 下载同步

获取Repo工具并配置镜像地址 curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo chmod a+x ~/bin/repo export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/初始化仓库并指定…

02020404 EF Core基础04-自增主键、Guid主键、混合自增、Hi/Lo算法、Migration深入、数据库其它迁移命令

02020404 EF Core基础04-自增主键、Guid主键、混合自增、Hi/Lo算法、Migration深入、数据库其它迁移命令 1. 主键无小事(视频3-6) 1.1 自增主键 1、EF Core支持多种主键生成策略:自动增长;Guid;Hi/Lo算法等。 2、…

02020403 EF Core基础03-Fluent API、Data Annotation、两种配置的选择

02020403 EF Core基础03-Fluent API、Data Annotation、两种配置的选择 1. FluentAPI哪些不该用(视频3-4) 1.1 约定配置 主要规则: 1:表名采用DbContext中的对应的DbSet的属性名。 2:数据表列的名字采用实体类属性…

深入解析:Python(1)|| 超基础语法(格式,输入输出,变量,字符串,运算符)

深入解析:Python(1)|| 超基础语法(格式,输入输出,变量,字符串,运算符)2025-09-21 21:23 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

深入解析:STM32-FreeRTOS操作系统-任务管理

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

Java中异步任务的执行方式有几种?

在Java中,异步任务的执行方式有多种,每种方式适用于不同的场景和需求。以下是常见的几种实现方式:Thread类 最基础的方式是直接使用Thread类创建线程执行任务:new Thread(() -> {// 异步执行的任务System.out.p…

mysql数据库自增ID为int类型超过范围

mysql数据库自增ID为int类型超过范围mysql数据的自增加的id(int)类型,超过范围:数据自增加ID,为int类型,超过范围,就插入数据库失败;怎么解决? 由于数据比较大, 1.第一个简单粗暴:把int变为(BIGINT)不用迁…

202508_浙江省网络安全测试职业职工技能竞赛_misc-1

流量分析,RE,XORTags:流量分析,RE,XOR 0x00. 题目 你是一名资深的网络安全分析取证师,受命调查一家IT公司近期遭遇的一起严重网络安全事件。 该公司主要业务是为中小型企业提供定制化管理系统和数据分析服务。 由…

python爬虫测试

python爬虫测试0.背景:要下合适自己的驱动,不然都是报错!!你需要完成以下两步:检查你的 Chrome 浏览器版本。打开 Chrome,在地址栏输入 chrome://settings/help。 你会看到你的 Chrome 版本号,例如 版本 120.0.…

广二联考题解补全计划:

第十七套: T1:取模性质,倍增 T2: DP优化,状态优化 T3:容斥原理,数位DP T1: 首先先提一个关于取模的性质,一个数对一个比它小的数取模,大小一定减半,考虑对 $ \frac {n}{2}$ 分治即可。 我们先预处理出来每个数…

如何在 C# 中将文本转换为 Word 以及将 Word 转换为文本 - 教程

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

Chapter 8 Contour / Shape Detection

def getContours(img):contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for cnt in contours:area = cv2.contourArea(cnt)print(area)if area > 500:# -1 代表所有的轮廓c…

【左程云算法笔记016】双端队列-双链表和固定数组实现 - 教程

【左程云算法笔记016】双端队列-双链表和固定数组实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

LeetCode 几道 Promises 和 Time 的题目 - 教程

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

[硬件电路-232]:FET(场效应管)的核心机制是通过栅极电压调控半导体“沟道“中的载流子浓度与分布,进而控制源极与漏极之间的电流大小 - 指南

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

java相关问题:面向对象入门2与类的识别

1. 关于 static 修饰符 应该用 static 修饰的方法: *不依赖于特定对象的实例状态:执行的操作不访问或修改对象的实例变量。 *工具类方法:常用于定义工具类中的方法,这些方法提供通用功能,无需创建类实例。 *工厂方…

EXCEL自动调整列宽的快捷键

在 Excel 中,自动调整列宽的快捷键是:Windows 系统:先选中要调整的列(可选中单列或多列),然后按下 Alt + H + O + I(依次按下这些键)。 Mac 系统:先选中要调整的列,然后按下 Command + Option + H + O + I。…

【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路 - 实践

【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

破解塔吊顶升高危难题!让事故率降 50%、审批快 70%

在建筑施工领域,塔吊顶升作业作为关键且高危的环节,长期以来饱受诸多痛点的困扰,严重影响施工安全与进度。传统模式下,人工对塔吊顶升作业的审查多依赖现场巡检,然而人力有限,在忙碌的施工现场,难以做到时刻紧盯…