随笔分类 - 数据结构
摘要:XIV.SP1557 GSS2 - Can you answer these queries II 我认为这是GSS题目中难度最大的一道,不接受反驳。 这题中出现多次的只给算一次,应该咋办呢? 我们回忆起这种情况的经典老题:[SDOI2009]HH的项链。正解是将询问离线后按照右端点递增排序,然后出
阅读全文
摘要:XIII.CF226E Noble Knight's Path 这题分为在线和离线两种做法然而我只会在线 在线的思路很简单,即先树剖,然后建出主席树。主席树一维维护的是时间,每一棵主席树内部维护的是树剖剖出来的结果。 然后对于每一次询问: 首先先从两边跳链,找到LCA,并找出两点路径间没有被“亵渎”
阅读全文
摘要:XII.初级版:[NOI2003]文本编辑器;进阶版:[AHOI2006]文本编辑器 两道题操作基本一致,唯一的区别就是进阶版多了一个翻转操作,因此干脆合在一起讲。 可以使用splay或fhq treap通过。个人认为fhq treap更加直观。 光标的位置,我们用一个值表示。 Move/
阅读全文
摘要:XI.CF85D Sum of Medians 这题做法有无数种,其中最暴力的一种就是用vector爆算用棵fhq treap直接处理。比线段树要好想的多。 代码: #include<bits/stdc++.h> using namespace std; typedef long long l
阅读全文
摘要:X.CF650D Zip-line 我们考虑在修改一个位置后,新的LIS可能有哪些。 就是原序列中的LIS。 设原序列LIS长度为。 此时有两种可能: A.被修改的位置在LIS中不是不可替代的(换句话说,有至少一条LIS不经过此位置)。此时,长度就是。 B.被修改的位置在LIS中
阅读全文
摘要:IX.[TJOI2017]不勤劳的图书管理员 我要举报……出题人语文明显不太好…… 首先,这题就是上一题的带权版。 然后,这题带了权后和上一题就不太一样了。 当你交换位置的书后,(默认) 位置在前或在后的书不受影响; 位置在之间,且$val_z\in(val
阅读全文
摘要:VIII.CF785E Anton and Permutation 我们看一下交换以后,哪些逆序对会受到影响。 设交换了位置,它们原本的值是。不妨设。 对于一个位置,在交换后仍然都排在它后面,不受影响; 对于一个位置,$
阅读全文
摘要:VII.[ZJOI2013]K大数查询 这题常卡的我快哭了QaQ 首先,我们仍然考虑树套树。 下标树套权值树(即我们前几题的一贯做法) 我们发现,要在区间树上打上区间添加数的tag,并且用tag树的并集进行二分。 因此最终的结果就是,大区间被分割成个小区间,但是每个小区间的$\log
阅读全文
摘要:VI.[CQOI2011]动态逆序对 这题需要支持查询前缀大于某个值的数量、后缀小于某个值的数量以及在某个地方插入值。 换句话说,我们要支持在以下标为轴,权值为轴的二维平面上动态删点以及询问矩形和。 如果我们把删点的时间看做轴的话,那就是典型的三维偏序。 直接树套树完成。 代码(常
阅读全文
摘要:V.【模板】三维偏序(陌上花开) 树套树比CDQ分治可爱一万倍!!!数据结构什么的最可爱了!!! 那么树套树如何进行三维偏序呢? 首先,第一维直接排序掉。 第二位用树状数组处理。 第三维套上权值线段树。 具体地说,因为我们要支持任何地方的单点修改以及前缀查询,就不得不套上树状数组。 这样,树套树便能
阅读全文
摘要:IV.【模板】二逼平衡树(树套树) 树状数组套权值线段树最好了……的复杂度可比的什么线段树套平衡树要强一百万倍!其实是我不会写 分析一下操作: 二分出来最大的的数后直接权值线段树上查询前缀和。 就是II.Dynamic Rankings。 直接修改。 权值
阅读全文
摘要:III.CF1093E Intersection of Permutations 首先,我们如果令表示在数组中出现的位置, 那么对于一次询问,答案就是中下标在间的数量。 思路1.树状数组套权值线段树
阅读全文
摘要:II.Dynamic Rankings 树状数组套权值线段树。 正经不带修的方法就是主席树(即一堆权值线段树并一起)。现在带修了,那就把这些主席树拆开,拆成棵权值线段树,然后用树状数组进行单点修改以及前缀求和,复杂度。 代码: #include<bits/stdc++
阅读全文
摘要:I.CF19D Points 树套树第一题。 思路1.线段树套线段树 因为内外的操作类似,很容易就能想到使用线段树套线段树,然后在线段树上二分来找到答案。 复杂度是,常数极大,因此被卡了。 代码: #include<bits/stdc++.h> using namespa
阅读全文
摘要:II.[HAOI2012]高速公路 本题已经在我的任务列表里挂了1年多了 我们将这里的“期望”转成“。然后,我们考虑使用线段树维护区间中任意两点间距离之和。 在每个节点上,我们维护如下东西: \(s
阅读全文
摘要:XII.小清新数据结构题 太 清 新 了 话说就我一个人看到这道题后兴冲冲的以为暴力LCT就能过然后发现LCT如果维护子树信息的话只有根节点处的信息是正确的吗(没错,就我一个) 闲话少说,正片开始。 法一:推一种式子,然后LCT/树剖维护 我们设为节点的值,然后为根
阅读全文
摘要:XII.CF1037H Security 一开始费尽心思写了个假的SA做法出来,后来才想到SAM做法…… 我们考虑贪心地求出比当前询问的串 略大的串的方法:即先找有没有前 位全相同,第 位最小的串存在于 中,如果没有再去找前 \(|
阅读全文
摘要:VII.[BZOJ2555]SubString 如果要在动态建SAM的过程中同时维护parent tree中的子树和,明显需要一种支持修改树的数据结构来维护。显然,这里应该使用LCT。 维护子树和,可以考虑LCT中经典的记录虚子树和的trick。然后剩下就是俩模板的拼接了。 不知道为什么,交上去会M
阅读全文
摘要:XXXVI.LOJ#6198. 谢特 SA+笛卡尔树+01trie+启发式合并模板四合一,省选模板练习必备神器 考虑SA后建立笛卡尔树。问题转换为在笛卡尔树的一段区间中(此时该区间内任意两条后缀的LCP长度均为区间中 最小值)任意两条后缀的 最大值。是经典
阅读全文
摘要:XXXI.CF666E Forensic Examination 题解
阅读全文