尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CF494C Helping People

CF494C Helping People
📅 发布时间:2026/6/19 18:32:04

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;
}

相关新闻

  • 深入解析:Extract Chart Data Directly to Excel
  • 02020403 EF Core基础03-Fluent API、Data Annotation、两种配置的选择
  • 深入解析:Python(1)|| 超基础语法(格式,输入输出,变量,字符串,运算符)

最新新闻

  • 2026杭州黄金回收机构测评:全域正规门店排名优选 - 奢侈品回收评测
  • 期权定价实战:从BSM模型到Python代码实现
  • FanControl:Windows平台专业风扇智能温控的完整解决方案
  • 建构之法阅读笔记5
  • 别被线上虚高报价骗了!广州正规回收认准收的顶,报价即成交价 - 奢侈品回收测评
  • Honey Select 2终极游戏增强补丁:一键解锁完整游戏体验的完整解决方案

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号