数据结构:主席树…
文章平均质量分 86
各种数据结构,如哈希表、线段树、主席树……
hans774882968
这个作者很懒,什么都没留下…
展开
-
SCUACM2023集训前训练-数据结构
交换操作是“等价关系”的经典模型,就连LC都考过,回去看了一下才发现是同一道题……《离散数学》中等价关系的定义:交换操作满足传递性的证明,就是找到`1 2 3 -> 3 2 1`的一种方式,如下:`1 2 3 -> 1 3 2 -> 3 1 2 -> 3 2 1`。故“可交换”是等价关系。把等价关系看成无向边,则可以得到一系列连通分量,每个连通分量的元素两两可交换,即每个连通分量内部的元素可以**任意排序**。最后只需要求每个连通分量下标值和`p[]`值的交集。原创 2023-04-23 00:19:29 · 471 阅读 · 0 评论 -
SCUACM2023集训前训练-基础算法
## B-单调栈+贪心,好题这题我不会……看的题解:https://blog.csdn.net/weixin_33863087/article/details/85941548。现有题解一个比一个抽象,因此我写了一篇极为通俗易懂的题解~### 单调栈首先考虑区间`[l, r]`是“障碍段”的充要条件:`f[r] = r && r-a[r] == l-a[l]`。这里`f[r]`表示`a[r]`为最大值的最左侧端点,`g[l]`表示`a[l]`为最小值的最右侧端点。这两原创 2023-04-20 01:22:49 · 490 阅读 · 0 评论 -
【简单算法】2022SCUACM集训队冬季选拔全题解
没想到现在冬季选拔都这么难了……题目传送门本文juejin:https://juejin.cn/post/7222531019319722039/作者:hans774882968以及hans774882968以及hans774882968参考:https://www.cnblogs.com/ycx-akioi/p/AtCoder-abc165.html最长严格上升子序列树上版本。经典问题有两种做法:树状数组、维护数组+二分查找。但把问题搬到树上后,我们遇到一个问题:在回溯的时候,需要对数据结构进行撤销操作。原创 2023-04-16 17:11:26 · 818 阅读 · 0 评论 -
AtCoder abc256全题解(区间合并模板、矩阵快速幂优化dp、线段树……)
作者:hans774882968以及hans774882968水,略。模拟即可。C-枚举题意:有一个九宫格,每格填一个正整数,输入分别表示期望的每行和每列的数字的和。求方案数。只需要枚举4个格子就能确定所有的数了,计算量完全可行。我选择的是这4个格子。D-区间合并模板区间合并模板,参考:https://blog.nowcoder.net/n/834a656e47df44e58e830fdd87d3e253。E-图论建模,函数图的性质题意个人排队拿糖果。输入长为的两个数组,表示如果号人排在号人后原创 2022-06-22 02:57:34 · 724 阅读 · 0 评论 -
第45届ICPC沈阳站J:Descent of Dragons——可持久化线段树
本文CSDN本文juejin作者:hans774882968以及hans774882968一个长数组,初值为全0,有个操作:网上缺乏一篇通俗易懂的题解,所以我尽力去贡献一篇!设数组表示输入参数,数组元素大于等于的为1,小于的为0,由它建立一棵权值线段树,于是可以快速查询一个区间大于等于的数的个数。设表示参数对应的上述权值线段树,则需要管理个权值线段树。一个区间涉及的线段树节点log个,采用可持久化线段树即可。属性是指向左右孩子的指针。加1表示创建新节点。建树用函数创建新节点,依赖函数确定和节点左右孩子。原创 2022-06-18 02:26:16 · 562 阅读 · 0 评论 -
Codeforces Round 797 (Div. 3,CF1690)全题解
传送门作者:hans774882968以及hans774882968本文CSDN链接本文juejin链接估计最大值的下界,直接枚举最大值就能过:不过输入可以发现最大值是可以直接写出来的式子,所以可以进一步优化:B分等于和不等于0讨论。用set实现最方便。C只需要求实际的开始时间,其表达式看样例就很容易写出来。D直接枚举一个长为的区间,看里面有多少个即可。用前缀和统计个数。E,这就把定值和提取出来了,后续只需要考虑是否成立。这是一个很经典的贪心问题,好像是以过河为背景来着?贪心策略:先排序原创 2022-06-09 17:54:58 · 274 阅读 · 0 评论 -
洛谷上若干经典树状数组题解集(lg1774、lg1966、lg1972)
文章目录lg1774lg1966lg1774的升级版简化一下c数组的求法代码lg1972juejin传送门lg1774传送门经典题:排序只能交换相邻元素的最少操作次数。为什么答案是逆序数:升序数组逆序数为0。一次操作逆序数减少0或1。因此最优方案必定满足:每一步的逆序数都能减少1。证毕。但我们还是不知道最优方案长啥样!对于a[i] <= a[i+1]的i,交换它们是多余的,因为逆序数不减少。因此我们设右侧是已经升序排好的部分,那么我们就需要在左侧找到最大值并把它放到期望的位置(当然还有一些原创 2022-04-26 14:55:24 · 251 阅读 · 0 评论 -
【简单算法】2021SCUACM集训队冬季选拔2全题解
传送门本来在预习课程期末的,结果还是没能忍住来写了一套题。20230416更新:终于把之前没写的题都补上了~作者:hans774882968以及hans774882968以及hans774882968签到。数有多少个个位为9的。B-多重背包看到就猜到大约是的算法,所以显然要先取模+开桶计数。把模m的和看成重量,于是转化为多重背包求是否存在方案的问题。但麻烦的是,不能直接用,因为它受到的影响,必然为true;并且也无法直接算方案数。那么我们就在dp转移的过程中监听即可。不难的一个背包居然tag是1900原创 2021-12-26 18:31:21 · 866 阅读 · 0 评论 -
四川大学2021SCUACM新生赛决赛大部分题解(差分、dp、线段树……)
传送门这套题至少要过8题才能算是有脑这种器官,过9题才是正常人。很可惜我没有脑~B这题我比赛后学会的,还没补代码。首先考虑对查询按x升序排序。我们的主要思想是填平之前求出的结果与当前问题的差距。这里”差距“指的是一个数据结构,它就是一个数组b[],处理到当前查询的时候,b[i]表示max(a[i~前一个询问的x])。如何填平差距?设第一个a值大于i的点为L[i],设当前查询的参数为curL,curR,curX。则[L[i]+1~i]的max(a[i~curX])都是a[i],而[1~L[i]]的m原创 2021-12-13 01:32:37 · 1598 阅读 · 4 评论 -
牛客2021年七夕节比赛大部分题解(因数枚举模板、线段树、dp……)
传送门偶然刷到了,就做了一下。F是防AK,不会,ACDE水,略。比较有参考价值的是I题,dp。B一开始想的是状压枚举素数集合,但是各素因子的幂不一定要统一。于是改成了直接dfs枚举所有素数的所有幂次,并逐一判定。写完了一发AC了以后才发现,枚举所有素数的所有幂次也就是枚举所有因数,23333我是sb。不过这个枚举方法肯定比根号枚举要快一点。#include <bits/stdc++.h>using namespace std;typedef long long LL;#defi原创 2021-12-12 23:40:47 · 589 阅读 · 0 评论 -
lc380——数据结构好题
传送门需要等概率返回随机元素,自然是用数组比较好,用哈希表不太方便。但insert需要判定元素是否存在,用数组不方便,用哈希表就比较好。难道我们要二选一吗?小孩才做选择,大人表示:我全都要!我们不妨既维护数组又维护哈希表。于是我们只需要解决remove的问题,但remove就变得更困难了。O(1)删除哈希表也是容易的,但如何O(1)删除数组呢?我们注意到,哈希表的value存储的属性还没用上。因为题意保证值是unique的,所以我们不妨记录每个值在数组中的下标。于是我们知道了待删除元素v的下标idx原创 2021-11-02 15:16:42 · 109 阅读 · 0 评论 -
ICPC20昆明M——动态开点权值线段树(主席树)
是ICPC19徐州H的子问题。ICPC19徐州H需要用带修主席树。ICPC19徐州H随便找的题解需要发现一个结论(发现不了啊QAQ):考虑当前已知[1,s[x]]都能被表示,现在记s[x+1]为[L,R]中≤s[x]+1的所有数的和,若s[x+1]>s[x],则当前能表示的区间拓展为[1,s[x+1]],否则当前查询的答案就是s[x]+1。证明:s[x+1]相比于上一轮新加了多个数,但只需要证明新加入1个数的情况,然后反复应用即可。设新加入的数t≤s[x]+1。则对于s[x]+i,1≤i≤t,0≤原创 2021-07-14 16:24:52 · 225 阅读 · 0 评论