【2019北京集训测试赛(十三)】数据(sj) 冷静分析
题目大意:给你一个代表区间$[1,n]$的线段树,问你随机访问区间$[1,n]$中的一个子区间,覆盖到的线段树节点个数的期望(需要乘上$\frac{n(n-1)}{2}$后输出)。
数据范围:$n≤10^{18}$
貌似各位的做法都非常优秀,代码也非常短,那么我来讲一个垃圾做法:
我们设$f[i]$表示一个构建出$[1,i]$的线段树,随机访问一个子区间覆盖线段树节点个数的期望(为方便处理,乘上了$\frac{i(i-1)}{2}$)。
显然$f[n]$就是答案。
我们再设$fl[j][i]$表示一棵$[1,i]$的线段树,从左边往右,覆盖了$j$个线段树节点的方案数。
同理我们处理出$fr[j][i]$
我们发现:当$j>1$时,选择覆盖$j$个点,这$j$个点显然不会包含整个区间。
我们设$L=\lceil \frac{i}{2}\rceil$ ,$R=\lfloor \frac{i}{2} \rfloor $
那么有$fl[i][j]=fl[j][L]+fl[j-1][r]-[j≤2],fr[i][j]$同理。
我们考虑$f[i]$要怎么求。
不难发现,$f[i]$有四种构成方式:只选择了左/右端的区间,两边都选了,恰好选择了根节点。
只选择一侧的显然是$f[L]+f[R]$,恰好选择根节点的贡献显然为$1$。
对于两边都选的情况,我们通过枚举$fr[][L]$和$fl[][R]$,简单地乘起来,再乘上总共选择的节点个数,就可以了。
综上,则有:
$f[i]=1+f[L]+f[R]+\sum\limits_{v_1=1}^{dep_1}\sum\limits_{v_2=1}^{dep_2} (v_1+v_2)\times\bigg(fr[v_1][L]\times fl[v_2][R]-[v1=1,v2=1]\bigg)$
其中,$dep1$,$dep2$表示左右两颗子树的最大深度。
在求解过程中,我们暴力往下递归,我们需要特判$i=1,2,3$的情况,然后就可以了。
这个复杂度比较垃圾,应该是$O(log^3\ n)$的。
场上真刺激,最后十分钟调处来了23333
#include<bits/stdc++.h>
#define M 998244353
#define L long long
#define MOD 998244353
using namespace std; map<L,L> f,fl[],fr[],vis,up; void solve(L i){
if(vis[i]) return;
if(i==){
f[i]=fl[][i]=fr[][i]=vis[i]=;
fl[][i]=fr[][i]=up[i]=;
return;
}
if(i==){
f[i]=;
fl[][i]=fr[][i]=;
fl[][i]=fr[][i]=;
vis[i]=up[i]=;
return;
}
if(i==){
f[i]=;
fl[][i]=; fr[][i]=;
fl[][i]=fr[][i]=;
vis[i]=; up[i]=;
fr[][i]=;
return;
}
L l=(i+)>>,r=i-l;
solve(l); solve(r);
int upl=up[l],upr=up[r],UP=max(upl,upr)+; up[i]=UP;
vis[i]=;
L sum=f[l]+f[r];
for(int v1=;v1<=upl;v1++)
for(int v2=;v2<=upr;v2++){
sum=(sum+1LL*(v1+v2)*(fr[v1][l]*fl[v2][r]%MOD+MOD-(v1==&&v2==)))%MOD;
}
// for(int v1=0;v1<=upl;v1++) sum=(sum-fr[v1][l])%MOD;
// for(int v2=0;v2<=upr;v2++) sum=(sum-fl[v2][r])%MOD;
f[i]=(sum+)%MOD;
for(int j=;j<=UP;j++){
fl[j][i]=(fl[j][l]+fl[j-][r]-(j<=)+MOD)%MOD;
int x=fl[j][i];
fr[j][i]=(fr[j-][l]+fr[j][r]-(j<=)+MOD)%MOD;
int y=fr[j][i];
x++;
}
// cout<<fr[2][3]<<endl;
fl[][i]=fr[][i]=;
fl[][i]++; fr[][i]++;
} int main(){
L n;cin>>n;
solve(n);
cout<<f[n]<<endl;
}
【2019北京集训测试赛(十三)】数据(sj) 冷静分析的更多相关文章
- 【2019北京集训测试赛(七)】 操作 分治+FFT+生成函数
题目大意:你有$n$个操作和一个初始为$0$的变量$x$. 第$i$个操作为:以$P_i$的概率给$x$加上$A_i$,剩下$1-P_i$的概率给$x$乘上$B_i$. 你袭击生成了一个长度为$n$的 ...
- 2016北京集训测试赛(十三) Problem B: 网络战争
Solution KD tree + 最小割树
- 2016北京集训测试赛(十六)Problem A: 任务安排
Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...
- 【2016北京集训测试赛(十)】 Azelso (期望DP)
Time Limit: 1000 ms Memory Limit: 256 MB Description 题解 状态表示: 这题的状态表示有点难想...... 设$f_i$表示第$i$个事件经过之 ...
- 【2016北京集训测试赛(二)】 thr (树形DP)
Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...
- 【2016北京集训测试赛(八)】 crash的数列 (思考题)
Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多 ...
- 【2016北京集训测试赛(十六)】 River (最大流)
Description Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...
- 【2016北京集训测试赛】river
HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...
- 【2016北京集训测试赛】azelso
[吐槽] 首先当然是要orzyww啦 以及orzyxq奇妙顺推很强qwq 嗯..怎么说呢虽然说之前零零散散做了一些概d的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...
随机推荐
- body标签
标签(空格分隔): body标签 body标签: 想要在网页上展示出来的内容一定要放在body标签中. 把我们之前那一段HTML代码贴过来,保存到一个HTML格式的文件中. <!DOCTYPE ...
- LENGTH()和CHAR_LENGTH()区别
LENGTH()返回以字节为单位的字符串的长度.CHAR_LENGTH()返回以字符为单位的字符串的长度. 分别对应于java中的str.getBytes().length和str.length( ...
- swift 需求: 导航栏和HeaderView 使用一个背景图片。
问题界面 需求: 导航栏和HeaderView 使用一个背景图片.解决方案: 让 导航栏 变成透明. override func viewWillAppear(_ animated: Bool) { ...
- 原子性 CAS算法
一. i++ 的原子性问题 1.问题的引入: i++ 的实际操作分为三个步骤:读--改--写 实现线程,代码如下: public class AtomicDemo implements Runnabl ...
- Linux下所有命令失效的解决方法
今天在设置环境变量时,一不小心,设置错了,系统中的所有命令全部失效了,可把我急坏了,下面用一条命令可解决: 解决办法:重新设置环境变量PATH export PATH=/usr/sbin:/usr/b ...
- magento中Model创建以及该Model对于数据库的增删改查
本文是按照magento英文文档照做与翻译的. Model层的实现是mvc框架的一个巨大的部分.它代表了你的应用的数据,或者说大多数应用没有数据是无用的.Magento的Model扮演着一个重要的角色 ...
- 常用screen参数
摘自:https://www.cnblogs.com/webnote/p/5749675.html screen -S yourname -> 新建一个叫yourname的sessionscre ...
- Firefox录制时浏览器提示代理服务器拒绝连接
解决方法:检查火狐浏览器的代理设置是否正确,在 菜单栏 工具->选项->高级->网络->连接->设置里.将“配置访问因特网的代理”选项改为“无代理”.
- 学习Acegi应用到实际项目中(3)
此节将要了解的是AnonymousProcessingFilter.RememberMeProcessingFilter和LogoutFilter三个过滤器 1.AnonymousProcessing ...
- ABP框架系列之九:(Abp-Session-会话)
Introduction ASP.NET Boilerplate provides IAbpSession interface to obtain current user and tenant wi ...