直接计数其实不好记,不如计数转期望。

令 \(f_i\) 表示点 \(i\) 成为制高点概率,不难发现期望就是 \(\sum f_i\)。

根据定义对于 \(f\) 我们有如下转移 \(f_i = \frac{\sum_{j=l_i}^{r_i} f_j}{r_i-l_i+1}\) 又因为 \(l_i \leq r_i < i\) 所以按照 \(i\) 的顺序转移即可保证正确性,那么用主席树维护转移即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2e5+114;
const int top = 100000000000;
const int mod = 998244353;
int n;
struct Node{
int ls,rs,sum;
}tr[maxn*60];
#define ls(cur)(tr[cur].ls)
#define rs(cur)(tr[cur].rs)
int rt[maxn];
int tot;
void insert(int &cur,int lst,int lt,int rt,int pos,int v){
if(pos<lt||pos>rt){
cur=lst;
return ;
}
if(cur==0) cur=++tot,tr[cur].sum=tr[lst].sum;
tr[cur].sum+=v;
tr[cur].sum%=mod;
if(lt==rt) return ;
int mid=(lt+rt)>>1;
insert(tr[cur].ls,tr[lst].ls,lt,mid,pos,v);
insert(tr[cur].rs,tr[lst].rs,mid+1,rt,pos,v);
}
int query(int cur,int lt,int rt,int l,int r){
if(lt>r||rt<l||cur==0) return 0;
if(l<=lt&&rt<=r) return tr[cur].sum;
int mid=(lt+rt)>>1;
return query(ls(cur),lt,mid,l,r)+query(rs(cur),mid+1,rt,l,r)%mod;
}
int qpow(int a,int b){
if(b==0) return 1;
if(b==1) return a%mod;
int res=qpow(a,b/2);
res=res*res%mod;
if(b%2==1) res=res*a%mod;
return res;
}
int h[maxn],L[maxn],R[maxn],res=1,ans;
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>h[i],h[i]++;
for(int i=2;i<=n;i++) cin>>L[i]>>R[i];
res=res*1;
ans+=1;
insert(rt[1],rt[0],1,top,h[1],1);
for(int i=2;i<=n;i++){
int f=((query(rt[R[i]],1,top,1,h[i])-query(rt[L[i]-1],1,top,1,h[i])+mod)%mod)*qpow((R[i]-L[i]+1)%mod,mod-2)%mod;
res=res*(R[i]-L[i]+1)%mod;
ans=(ans+f)%mod;
insert(rt[i],rt[i-1],1,top,h[i],f);
}
cout<<(ans*res)%mod;
}

P6655 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. 详解GROUP BY 如何与 SELECT 语句进行交互?

    SELECT 列表: 矢量聚合.如果 SELECT 列表中包含聚合函数,则 GROUP BY 将计算每组的汇总值.这些函数称为矢量聚合. Distinct 聚合.ROLLUP.CUBE 和 GROUP ...

  2. UE4 C++调用C# DLL(DllExport方法)

    之前看见园子里一篇C++调用C#的文章,参考后拿UE试一下.刚开始尝试了C# dll > CLR C++ DLL > Native C++ DLL的做法, 原生环境下是可以的,但是到UE4 ...

  3. UE4 C++调用手柄震动

    近期封装输入相关逻辑,简单归纳下. 蓝图实现 内容界面右键Miscellaneous->Force Feedback Effect,创建力反馈对象并填写相关参数: 然后在蓝图中用Spawn Fo ...

  4. Go-Zero定义API实战:探索API语法规范与最佳实践(五)

    前言 上一篇文章带你实现了Go-Zero模板定制化,本文将继续分享如何使用GO-ZERO进行业务开发. 通过编写API层,我们能够对外进行接口的暴露,因此学习规范的API层编写姿势是很重要的. 通过本 ...

  5. Linux系统编程(十)线程池

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h& ...

  6. 【web】自定义协议Protocol URL

    URL Protocol(自定义协议)可以让web页面调用本地exe程序,这个神奇的功能是怎么实现的呢? URL ProtocolURL Protocol,没错就是标题里所说的自定义协议.这玩意儿大家 ...

  7. MQTT服务器连接不上的问题

    问题描述 环境:阿里云服务器Ubuntu 22.04.3 LTS,安装mosquitto后,在虚拟机端订阅消息出现报错(以前用阿里云Ubuntu20.04 LTS的服务器装上就能用),以下服务器ip是 ...

  8. 【论文笔记】ResNet深度残差网络

    [深度学习]总目录 深度残差网络(ResNet)由微软研究院的何恺明.张祥雨.任少卿.孙剑提出.研究动机是为了解决深度网络的退化问题,不同于过去的网络是通过学习去拟合一个分布,ResNet通过学习去拟 ...

  9. C#笔记(1)窗体

    1. 隐藏TabPage 在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).设置该TabPage的父容器为null 即可,如TabPage.Parent = null .如 ...

  10. python-判断两个序列的成员是否一样

    目的:判断两个序列的成员是否一样,如:list1 = [1, 2],list2 = [2, 1],则两个序列的成员是一样的. 实现:借助集合set()的性质实现. 代码如下: 1 if __name_ ...