首页 > 其他分享 >20240219总结

20240219总结

时间:2024-02-19 16:33:55浏览次数:29  
标签:总结 度数 20240219 偶数 操作 考虑 加边 节点

P9994 [Ynoi Easy Round 2024] TEST_132

根号分治。
考虑修改操作。如果修改的x数量大于阙值B,那么打上操作次数标记,否则直接各自修改对应的\(y_i\)答案。
查询时对于一个y,记录下所有使得xi数量大于B且yi=y的i,这一些贡献是没有加上的。
显然xi的数量<=n/B,对于每一个这样的xi快速幂暴力加上贡献时间复杂度可以承受。

当然这种做法是可以优化的,也就是去掉快速幂的复杂度达到完全线性。

具体来说1e9+7的原根是5,可以预处理5的光速幂,查询O(1)计算答案。

CF603E Pastoral Oddities

首先有一个结论:每个点的度数都是奇数等价于图中只存在大小为偶数的连通块

必要性:一条边使得两个点度数加1,度数之和一定是偶数,每个点的度数又都是奇数,就只能是点数为偶

充分性:对于每一个偶数大小的连通块,随便拿出它的一颗生成树,从底向上跑一遍这个算法:
如果这个节点儿子连上来的边数为偶数,就连上他与父亲的边,反之则不然。
我们发现,这样的构造可以满足除了根的所有节点的限制。
然而因为这个连通块内除根外其他节点的数量是奇数,而这些点的度数都是奇数,而包括根的总度数是偶数,所以根的度数自然也是奇数

现在开始考虑最小化最大边权的限制。

先不考虑动态加边,根据上面的思路,我们要找的是一颗生成树,那就是求最小生成树,Kruskal一下(从小到大加边)就行了。

可以得到静态版本的解法:
把边按权值排序,用并查集维护奇联通块的个数,一直加边直到满足条件

考虑怎么把这个做法推广到动态:
发现只有加边操作,没有删边。所以有一个显然的结论:一条边如果加边之前没有入选,那么加边以后一定也不会被选中。也就是说,每一条边有一个影响范围

影响范围+时间轴->线段树分治

考虑求一条边的影响区间。首先出现时间是知道的。考虑在线段树分治的过程中,每访问到一个叶子,必定需要后移Kruskal的指针,将新的边纳入答案直到合法,那么这个时间就是这条边影响范围的结束位置。

P8512 [Ynoi Easy Round 2021] TEST_152

自己第一次想的时候有一抽象想法:
把操作序列分块,每一块预处理出一起操作的结果。显然后操作的会覆盖前操作的。那么从后往前扫,把覆盖过的起点直接指向终点后面,前面的操作如果覆盖到一样的地方直接跳过去。

不知道时间复杂度是否是O(nsqrt(n)),理论可行的话也一定很难写(这种题目就不可能好写)

正解:
把询问离线,按照 r 排序,然后我们每次询问的时候。

我们可以开一个 set 来维护 c 序列。

set 中每个节点有一个三元组 (l,r,v)(l,r,v),表示cl...cr都为 v。

每次询问的时候,我们维护执行 \(1 \sim r\) 操作后 c 序列,每个节点同时存储是哪次操作产生的节点。然后我们询问 \([l,r]\) 的时候,就是所有产生时的操作编号 \(\geq l\) 的节点的权值和。

这个我们用树状数组维护即可。

P4458 [BJOI2018] 链上二次求和

考虑把起点固定为1,计算一个数的贡献。
对于一个固定的区间k,考虑一个位置i的贡献。
不难发现,对于一个位置,有三种限制:

  • 1.距离1的长度i
  • 2.距离n的长度n-i+1
  • 3.k的大小
    也就是三者取最小值
    不难得出计算公式:

\[\sum_{i=1}^{n}a_i\sum_{k=l}^{r}min(i,n-i+1,k) \]

三个式子取最小值显然是不好处理的,考虑能不能先去掉一个。

对于i和n-i+1两者的大小关系,其实i靠近起点就是i小,靠近终点就是n-i+1小。

于是我们可以把计算公式从中间分成两半,只考虑i或n-i+1与k的大小关系就行了

先考虑左半边:

\[\sum_{i=1}^{n/2}a_i\sum_{k=l}^{r}min(i,k) \]

image
不难分析出结果,右半边同理。
后面的操作还没搞懂

标签:总结,度数,20240219,偶数,操作,考虑,加边,节点
From: https://www.cnblogs.com/wangwenhan/p/18020797

相关文章

  • 常规代码性能优化的总结
    今天同事发开中遇到了一个代码性能优化的问题,原本需求是:从一个数据库中查询某个表数据,存放到datatable中,然后遍历datatable,看这些数据在另一个数据库的表中是否存在,存在的话就要更新,不存在就要插入。就这个需求本身来说很简单,但是随着数据量的增大,之前通过循环遍历的方......
  • Inno Setup使用总结
    InnoSetup是一个免费的Windows安装程序制作软件,其使用核心在于.iss脚本文件的制作,脚本制作完成后,可进行构建-编译制作安装包。1宏定义#define自定义一些全局变量,可以在下文中用到,定义安装包名称变量如下:#defineMyAppName"呼吸机服务安装包"2[Setup]设置安装包名称、......
  • 关于代码性能优化的总结
    今天同事发开中遇到了一个代码性能优化的问题,原本需求是:从一个数据库中查询某个表数据,存放到datatable中,然后遍历datatable,看这些数据在另一个数据库的表中是否存在,存在的话就要更新,不存在就要插入。就这个需求本身来说很简单,但是随着数据量的增大,之前通过循环遍历的方式......
  • 第十六节:各种排序算法总结和性能测试
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 15. C++类中成员变量的初始化总结
    C++类中成员变量的初始化总结1.普通的变量:一般不考虑啥效率的情况下可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。classCA{public:intdata;public:CA();};/*********/CA::CA():data(0)//……#1……初始化列表方式{......
  • 每日总结
    ScalaIF...ELSE语句ScalaIF...ELSE语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。可以通过下图来简单了解条件语句的执行过程:if语句if语句有布尔表达式及之后的语句块组成。语法if语句的语法格式如下:if(布尔表达式){//如果布尔表达......
  • 【总结】HTML+JS逆向混淆混合
    国外的题果然考的与众不同[secrypt_cen.html]这次是HTML网页,然后JS加密判断翻看JS代码很显然,关键的代码在checkPasswordJS混淆是必备的去混淆一条龙走起先将关键代码提取出来 JavaScript function_0x4857(_0x398c7a,_0x2b4590){const_0x104914= _0x25ec(......
  • stm32芯片的SPI接口调试总结之轮询模式
    一概念1组成SPI系统可直接与各个厂家生产的多种标准外围器件接口,它只需4条线:串行时钟线(SCK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)和低电平有效的从机选择线(NSS)。(1)MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数......
  • MySQL字符串截取总结:Left()、Right()、Substring()、Substring_index()
    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:left()、right()、substring()、substring_index()。一.从左开始截取字符串用法:le......
  • 双塔模型总结
    双塔模型介绍由于进入召回/粗排的候选数目比精排多很多,召回/粗排无法做的很精排一样复杂。现在业内比较通用的方案是采用双塔模型,左边塔建模userembedding,右边塔建模itemembedding,由于用户的行为经常发生变化,usertower需要经常更新,但是item状态很少发生变化,可以离线算好所有的......