首页 > 其他分享 >做题笔记(三)

做题笔记(三)

时间:2024-11-12 11:42:56浏览次数:1  
标签:text 线段 笔记 序列 区间 diff oplus

CF280D - k-Maximum Subsequence Sum \(\text{diff : } 2800\)

经典问题:求解区间 \(k\) 个不交子段的和的最大值。

对于没有修改的版本,我们采用 P6821 [PA2012] Tanie linie 的做法,首先将原序列连续的正(负)数缩成一个数,然后用加入正数,不断减少连续段(加入负数和删除正数),用堆维护即可。

对于修改版本,我们用线段树维护区间最大子段和以及位置,每次取出最大的子段和,然后区间取反,也就是模拟费用流。

CF464E - The Classic Problem \(\text{diff : } 3000\)

经典问题:利用主席树优化二进制高精度加法和比较。

加法形如区间清空和单点赋值,可以线段树上二分解决,清空就是删除节点,比较可以记录每个点的哈希值,然后线段树上二分第一个不一样的位置即可。

CF1558D - Top-Notch Insertions \(\text{diff : } 2600\)

首先利用线段树上二分求得和答案等价的一组偏序关系。

变成经典问题:\(a _ 1 \oplus a _ 2 \oplus \dots \oplus a _ n\),\(\oplus\) 中有 \(c\) 个小于号,\(n - 1 - c\) 个小于等于号,求 $a _ i \in [1, n] \cap \mathbb{N} $ 的方案。

考虑把 \(a _ i \le a _ {i + 1}\) 变成 \(a _ i < a _ {i + 1} + 1\),这样的话原序列的值域就变成了 \(n + n - 1 - c = 2n - c - 1\),最后的答案就是 \(\binom{2n - c- 1}{n}\)。

CF914F - Substrings in a String \(\text{diff : } 3000\)

bitset 优化字符串匹配的模板。

记录每种字符出现的位置,区间询问的话就差分答案即可。

CF840C - On the Bench \(\text{diff : } 2500\)

经典问题:求给定序列有多少种排列使得相邻元素都不相同。

考虑容斥,求出钦定有 \(i\) 对相邻元素相同的方案 \(f _ i\),答案就是 \(\sum \limits_{i = 0}^{n - 1}(-1)^i f _ i\)。

考虑先计算无标号有颜色的小球计数,最后乘上 \(\prod s_i!\) 即可(\(s _ i\) 表示某种颜色小球的个数),发现不同的组合对象互不影响,那么先计算 \(g _ {i,j}\) 表示对于第 \(i\) 种小球,划分出 \(j\) 对相邻元素的方案。

\[g _ {i,j} = \dfrac{\binom{s _ i - 1}{j}}{(s _ i - j)!} \]

含义是在 \(s _ i - 1\) 个空隙种选出 \(j\) 个,然后把序列缩起来,有 \(s _ i - j\) 个连通块,这些连通块之间的顺序是无所谓的,那么要除掉。

最后卷积起来就可以了,时间复杂度 \(\mathcal{O}(n^2)\) 或者 \(\mathcal{O}(n \log^2 n)\)。

CF1061E - Politics \(\text{diff : } 2600\)

关键在于对于划分唯一的分配方式,对于一个点,钦定其贡献到最近的(有信息的)祖先,那么直接流就可以了。

标签:text,线段,笔记,序列,区间,diff,oplus
From: https://www.cnblogs.com/z-t-rui/p/18541514

相关文章

  • 做题笔记(四)
    CF1773H-HotandCold\(\text{diff:}2600\)询问\((x,y)\)和\((x+1,y)\)和\((x+1,y+1)\)即可将\(x,y\)坐标的范围减半,然后可以在\(3\log_210^6=60\)次询问左右解决这个问题。CF725F-FamilyPhotos\(\text{diff:}2900\)发现有些东西\(A,B\)都不......
  • Mit6.S081笔记Lab7: Multithreading 多线程
    课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.htmlLab地址:https://pdos.csail.mit.edu/6.S081/2020/labs/thread.html我的代码地址:https://github.com/Amroning/MIT6.S081/tree/threadxv6手册:https://pdos.csail.mit.edu/6.S081/2020/xv6/book-riscv-rev1.pdf相......
  • 《Django 5 By Example》阅读笔记:p17-p53
    《Django5ByExample》学习第2天,p17-p53总结,总计37页。一、技术总结1.数据库迁移pythonmanage.pymakemigrationsblogpythonmanage.pysqlmigrateblog0001pythonmanage.pymigrate2.ORMDjango自带ORM。3.view(1)定义p42,ADjangoviewisjustaPythonfuncti......
  • 软考架构案例分析-重点回顾笔记2
    反规范化设计方法? 常见反规范化技术:   增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。   增加派生列:在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作     并且避免计算或使用集合函数。  ......
  • 工作学习笔记(六)变量命名规则
    在Java中,除了写注释来增加代码的可读性和维护性,还可以通过一些命名规则和约定来提高代码的可读性和维护性。变量命名规则的概述使用有意义的名字:变量名应该具有清晰的含义,能够准确地反映变量的用途。避免使用单个字符或无意义的缩写。小驼峰命名法:在变量名中使用驼峰命......
  • AUTOSAR_EXP_ARAComAPI的7章笔记(2)
    ☞返回总目录相关总结:服务发现实现策略总结7.2服务发现的实现策略如前面章节所述,ara::com期望产品供应商实现服务发现的功能。服务发现功能基本上是在API级别通过FindService、OfferService和StopOfferService方法定义的,协议和实现细节是开放的。当一个AP节点(更......
  • 并查集+最小生成树 学习笔记+杂题 2
    图论系列:前言:相关题单:戳我算法讲解:戳我CF1829ETheLakes给定一张\(n*m\)的矩阵,询问正整数四联通块权值和的最大值。并查集维护即可,记录一下集合内的点的权值和。代码:constintM=1005;intT,n,m,ans;inta[M][M],fa[M*M],siz[M*M];intfx[5]={0,1,-1,0,0};intfy[5]......
  • 学习笔记(三十五):[email protected] (线性容器ArrayList)
    概述:一种线性数据结构,底层基于数组实现 一、导入import{ArrayList}from'@kit.ArkTS'; 二、定义letarrayList:ArrayList<string|number>=newArrayList(); 三、常用函数1、add,在ArrayList尾部插入元素 2、insert,在长度范围内任意位置插入指定元素......
  • 学习笔记(三十六):[email protected] (非线性容器HashMap)
    概述:HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value一、导入import{HashMap}from'@kit.ArkTS' 二、定义lethashMap:HashMap<string,number>=ne......
  • 24/11/11 算法笔记<视觉> 换脸,人脸特征点检测
    先介绍一下换脸的简单步骤1、提取两张图片的脸部特征点2、为两张图片创建mask3、进行映射变换使得人脸对齐4、使用opencv的泊松融合将两张图片合成我们直接上代码1.导入代码包importmediapipeasmpfrommediapipe.tasksimportpythonfrommediapipe.tasks.pythoni......