P6834-[Cnoi2020]梦原【数学期望,树状数组】
正题
题目链接:https://www.luogu.com.cn/problem/P6834?contestId=34123
题目大意
nnn个点,每个点i(i≠1)i(i\neq 1)i(i=1)随机连接[i−k,i−1][i-k,i-1][i−k,i−1]中的一个点。对于每个点有一个权值aia_iai。每次可以选择一个全部都是正权值的连通块里所有权值减一,求最优期望次数。
解题思路
考虑每个点的贡献,对于一个节点xxx和它的父节点fafafa显然根据铺设道路那题的做法,这个点的贡献就是max{ax−afa,0}max\{a_x-a_{fa},0\}max{ax−afa,0}
所以我们需要维护一个数据结构可以查询比axa_xax小的数的和,支持插入删除。显然离散化之后用树状数组即可。
时间复杂度O(nlogn)O(n\log n)O(nlogn)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lowbit(x) (x&-x)
#define ll long long
using namespace std;
const ll N=1e6+10,XJQ=998244353;
ll n,k,num,answer,cnt;
ll inv[N],a[N],b[N],t[N],z[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
void Change(ll x,ll val,ll flag){while(x<=cnt){t[x]=(t[x]+val)%XJQ;z[x]=z[x]+flag;x+=lowbit(x);}return;
}
ll Ask(ll x){ll ans=0;num=0;while(x){num=num+z[x];ans=(ans+t[x])%XJQ;x-=lowbit(x);}return ans;
}
int main()
{scanf("%lld%lld",&n,&k);inv[1]=1;for(ll i=2;i<=k;i++)inv[i]=XJQ-XJQ/i*inv[XJQ%i]%XJQ;for(ll i=1;i<=n;i++)scanf("%lld",&a[i]),b[++cnt]=a[i];sort(b+1,b+1+cnt);cnt=unique(b+1,b+1+cnt)-b-1;ll l=1,sum=0;answer=a[1];for(ll i=1;i<=n;i++){while(l<=n&&l<i-k){ll y=lower_bound(b+1,b+1+cnt,a[l])-b;Change(y,-a[l],-1);l++;}ll x=lower_bound(b+1,b+1+cnt,a[i])-b;ll w=Ask(x),ans=0;ans=(num*a[i]%XJQ-w+XJQ)%XJQ;answer=(answer+ans*inv[min(i-1,k)]%XJQ)%XJQ;Change(x,a[i],1);}printf("%lld",answer);
}
P6834-[Cnoi2020]梦原【数学期望,树状数组】相关推荐
- BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2141 是 hydro 的 BZOJ ...
- 树状数组 思路以及性能分析
特点 代码短.常数很小 应用及时间复杂度 区间查询:求前缀和 单点修改:给某个位置上的数加上一个数(同时能以非常小的代价维护前缀和) 时间复杂度:O(logn)O(logn)O(logn) 与一般前缀 ...
- HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景
http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的. 就是[L, ...
- Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
1.C. Kuroni and Impossible Calculation **知识点:同余定理 ** #include <iostream> #include <cstdio&g ...
- 【HDU - 5869】Different GCD Subarray Query(思维,数学,gcd,离线处理,查询区间不同数,树状数组 或 二分RMQ)
题干: This is a simple problem. The teacher gives Bob a list of problems about GCD (Greatest Common Di ...
- [CF808B] Average Sleep Time([强行]树状数组,数学)
题目链接:http://codeforces.com/contest/808/problem/B 题意:n个数,求其中每k个数的和的平均值. 鬼知道我怎么会石乐志上来就用了树状数组. 1 #inclu ...
- 数据结构--树状数组
文章目录 1. 树状数组 2. 单点修改 3. 区间修改 4. 完整代码 5. 参考文献 1. 树状数组 类似数据结构:线段树(Segment Tree) 树状数组 跟 线段树 的区别: 树状数组能做 ...
- Codeforces 1096F(dp + 树状数组)
题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...
- 吊打线段树的超级树状数组
你是否讨厌线段树那冗长的代码?你是否还在因为线段树的难调试而满头♂dark汗?那么,请不要错过!超级树状数组特价!只要998,只要998! ##¥--#--¥%--&%¥--ER#%$#$#^ ...
最新文章
- mysql常用命令操作
- 心电信号的PQRST模拟matlab代码(转载+自己调研汇总)
- java 静态绑定原理_Java方法的静态绑定与动态绑定讲解
- [js] 说说你对JS中暂性死区的理解,它有什么运用场景?
- 关键段 互斥量 以及信号量
- [已解决] 日常开发中禁用Tomcat自动重启
- requireJS(一)
- 全面认识openstack:OpenStack架构详解
- POJ 1398 Complete the sequence! ★ (差分)
- ARDUINO LCD显示简单的汉字、符号(保姆级教程!)
- c语言代码混淆器,工具:c 混淆器——AvIator
- k8s通过Service访问Pod
- PBI培训(3):Power BI主题设置方法汇总及示例
- Habor镜像仓库的使用
- 抖音直播伴侣和快手直播伴侣如何实现无人直播还能防封号
- Cesium中绘制矩形,根据四角/对角坐标绘制矩形
- C++中sprintf_s与sprintf的不同
- Android获取所有App信息
- ZCMU 1600: 卡斯丁狗要吃糖葫芦
- 计算机科学与技术专业导论3500,计算机科学与技术专业导论.docx
热门文章
- python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)
- php 实现类,php如何实现类
- 如何讲页面打入jar包中_如何把我的Java程序变成exe文件?
- python socket自动重连_详解python3中socket套接字的编码问题解决
- ab压力测试_Apache ab压力测试的知识点
- phpsotrm怎么 搜索功能_Windows 10 网络搜索设计太反人类?教你如何彻底关闭它
- 7-20 表达式转换 (25 分)(代码详解+题目分析)
- 二叉树最近公共祖先相关题目(Leetcode题解-Python语言)
- [SpringBoot2]web场景_SpringBoot2_SpringMVC自动配置概览
- [Java基础]Lambda表达式和匿名内部类的区别