随笔分类 -  数据结构

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

点击右上角即可分享
微信分享提示