首页 > 其他分享 >GZOI2024 Day1 T3 coin

GZOI2024 Day1 T3 coin

时间:2024-09-09 09:24:52浏览次数:7  
标签:GZOI2024 log 线段 T3 修改 数组 维护 coin 复杂度

coin(GZOI2024 Day1 T3)

题目大意

给你 \(n\) 个硬币,每个硬币有属性 \(a_i,b_i,p_i\),表示有 \(p_i\) 的概率值为 \(a_i\),有 \(1-p_i\) 的概率值为 \(b_i\)。所有的 \(a_i\) 所有的 \(b_i\) 均不同。有 \(q\) 次询问,询问有两种:

  1. 给定 \(l,r,k\),问 \([l,r]\) 的硬币值都 \(<\) 第 \(k\) 个硬币的值的概率是多少。
  2. 给定 \(x,a,b,p\),把第 \(x\) 个硬币修改成 \(a,b,p\)。

做法1 线段树

假设 \(a_i<b_i\),可以把第 \(k\) 的硬币分别计算 \(a_k,b_k\),算两次,答案按照概率相加。设第 \(k\) 个硬币的值为 \(x\),在 \(i\in[l,r]\) 且 \(i\not =k\),若:

  • 存在 \(x<a_i\),则 \(ans=0\)。(无论怎么去取,第 \(i\) 个硬币都比 \(x\) 大)
  • \(b_i<x \Rightarrow ans\times 1\)(无论怎么去取,第 \(i\) 个硬币都比 \(x\) 小)
  • \(a_i<x<b_i \Rightarrow ans\times p_i\)

所以如果 \([l,r]\) 存在 \(x<a_i\) 答案为 \(0\),这个很好判断。

否则答案是 \(\prod_{i=l}^r p_i[x<b_i]\)。

维护一颗线段树,每个节点表示一个区间。答案就是 \(\log\) 个区间的答案相加。

每个区间我们要取 \(b_i>x\) 的答案,考虑对线段树每个节点再维护一个数组,把 \(b_i\) 排序。做个前缀或者后缀积,询问时二分一下。不考虑修改时间复杂度 \(O(n\log^2n)\),空间 \(O(n\log n)\)。

修改时是单点修改。显然数组不好单点删除和插入,同时维护有序和前或后缀积。

考虑到每次修改只会涉及到线段树上 \(\log\) 个节点,我们把修改离线,加入那 \(\log\) 个数组的下标,要进行单点修改和前后缀积的操作,维护树状数组即可,空间仍然是 \(O(n\log n)\) 的,时间仍然是 \(O(n\log^2n)\)。

注意树状数组还需维护有多少个 \(0\),没有 \(0\) 才能计入答案。

总的来说,就是线段树套树状数组,离线询问离散化,优化空间。

做法2 分块

\(0\) 是好维护的,这里忽略不讲。

每个块按 \(b\) 排序,维护前缀积。

对于询问,整块进行二分定位,乘起来,散块暴力合并,时间 \(O(T+\frac{n}{T}\log T)\)。

对于修改,重构块,时间复杂度是 \(O(T)\)。

总的时间复杂度是 \(O(q(T+\frac{n}{T}\log T))=O(q(T+\frac{n}{T}\log N))\ge O(q\sqrt{N\log N})\)

\(T=\sqrt{N \log N}\) 时,时间复杂度最小,为 \(O(q\sqrt{N\log N})\)。

感觉分块更好写

精度的坑

虽然输入只有四位小数,但是可能因为二进制存小数位的问题,在输入时就会掉精度,如 \(0.0003\) 会变成 \(0.0002999 \dots 9997\)。解决办法时用 \(char\) 输入,或者乘上 \(10000\) 后四舍五入一下。

另一个比较常识的坑是小数按整型输出会直接抹掉小数位,不是四舍五入。

标签:GZOI2024,log,线段,T3,修改,数组,维护,coin,复杂度
From: https://www.cnblogs.com/liyixin0514/p/18403935

相关文章

  • Nuxt3入门:过渡效果(第5节)
    你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。Nuxt利用Vue的<Transition>组件在页面和布局之间应用过渡效果。一、页面过渡效果你可以启用页面过渡效果,以便对所有页面应用自动过渡效果。nuxt.config.jsexportdefaultdefineNuxtConfig({app:{pageTran......
  • [luoguAT_abc369_f]Gather Coins
    题意给定\(N\timesM\)的网格,给定\(K\)个二元组\((x_1,y_1),(x_2,y_2),\cdots,(x_K,y_K)\),求从\((1,1)\)到\((N,M)\)只向右或向下走最多可以经过多少个给定的方格,并给出一种方案。赛时不会赛后由于只能向右或向下走,因此当前所处位置\((nowx,nowy)\)中,\(......
  • 大模型微调使GPT3成为了可以聊天发布指令的ChatGPT
    你好,开始一种新的尝试,准备聊聊“大语言模型入门”。字少总结版本聊天大模型在通用大模型的基础上加一层微调就实现人人能用的大模型。使得通用大模型的能力被更多人使用和了解。大模型微调(Fine-tuning)是指在已经训练好的大模型基础上,进一步在特定任务或数据集上进行训练,以便让......
  • 第十二章 图论 Part3
    目录任务Kama101.孤岛的总面积思路Kama102.沉没孤岛思路Kama103.水流问题思路Kama104.建造最大岛屿思路心得任务Kama101.孤岛的总面积给定一个由1(陆地)和0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩......
  • PKUSC 2024 Day1 t3 独立
    想到了一个还比较优美的做法,首先令好\(dp\)后设\(d_{x}=max(dp_{x,0},dp_{x,1})-dp_{x,0}\)后原问题可以转化为\(d_{x}=max(w_{x}-\sum_{y\inson_{x}}d_{y},0)\),最后其实就是求所有方案\(\sum_{i=1}^{n}d_{i}\)的和,由于每一个点的期望只与子树有关而与子树外无关,直接对子......
  • MT3516A-ASEMI三相整流桥MT3516A
    编辑:llMT3516A-ASEMI三相整流桥MT3516A型号:MT3516A品牌:ASEMI封装:D-63批号:2024+类型:三相整流桥电流(ID):35A电压(VF):1600V安装方式:直插式封装特性:大功率、整流方桥产品引线数量:5产品内部芯片个数:5产品内部芯片尺寸:MIL工作结温:-40℃~150℃功率:大功率包装方式:500/盒:3000/箱MT3516A应用领......
  • test3
    与AI共舞的哈夫曼(399人攻克150pts)修改flag得到flag正确格式年轻人就要年轻,正经人谁自己写代码啊~打开二进制文件,Nepctf{human_zi6}……2个p,3个f,2个_,3个6……它再描述flag的样子p就是zip和Nep第二个_放在zip后面得到Nepctf{huffman_zip_666}......
  • AT3340:高授时精度的BDS/GPS双模接收机板卡功能资料书
    AT3340特性授时精度:20ns工作电流:62mA内置天线检测功能内置天线短路保护功能完备的授时告警信息天线短路电流:50mA@(3.00V~5.00V)天线开路电流:5mA@(3.00V~5.00V)支持GPS和BDS的单系统授时定位和双系统联合授时定位性能指标:通道数目:32个通道GPSonly、BDSonly、GPS&BDS冷......
  • SM2259XT2、SM2259XT3量产工具开启“调整不对称CH/CE组态”功能
    慧荣SM2259XT2、SM2259XT3量产工具开启“调整不对称CH/CE组态”功能:1、在量产部落下载量产工具后,解压量产工具压缩包;2、找到并打开量产工具文件夹中的“UFD_MP”文件夹,用记事本或者Notepad++打开“Setting.set”文件;3、在“[OPTION]”下添加一行“EnAdjUnbalanceMap=1”,并保......
  • SpringBoot3.x+MyBatisPlus+druid多数据源配置
    1引言本章主要介绍SpringBoot3.x多数据源配置,以及在此基础上配置分页拦截,自动填充功等功能,源码链接在文章最后。下面列出几个重要文件进行介绍。2项目结构整体项目结构如下,主要介绍配置文件和配置类。3主要代码3.1pom.xml注意SpringBoot3.x对应依赖为mybatis-plu......