
数据结构
QingQingDE23
这个作者很懒,什么都没留下…
展开
-
AcWing 1277. 维护序列 (线段树 乘除模板)
【代码】AcWing 1277. 维护序列 (线段树 乘除模板)原创 2022-09-16 22:38:22 · 120 阅读 · 0 评论 -
AcWing 247. 亚特兰蒂斯 (线段树 | 扫描线法)
【代码】AcWing 247. 亚特兰蒂斯 (线段树 | 扫描线法)原创 2022-09-16 16:25:31 · 182 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2 (线段树 区间修改+求区间和模板)
线段树,区间修改+求区间和模板。原创 2022-09-15 14:47:34 · 152 阅读 · 0 评论 -
AcWing 246. 区间最大公约数
好恶心的一个板子,调了半天。原创 2022-09-12 18:53:32 · 88 阅读 · 0 评论 -
AcWing 245. 你能回答这些问题吗
线段树维护多个信息,因为要找区间内连续子序列最大和,所以要多维护四个信息,分别是前缀和lmax,后缀和rmax,和区间和最大值tmax,还有区间总和sum。原创 2022-09-12 17:15:45 · 131 阅读 · 0 评论 -
AcWing 1275. 最大数 (线段树 单点修改 | 区间查询模板)
需要注意的是query函数和modify函数的mid都是由tr得出的,大区间不变,用大区间去找tr上的区间进行匹配。线段树,单点修改+区间查询最大值板子。原创 2022-09-12 13:09:46 · 111 阅读 · 0 评论 -
AcWing 244. 谜一样的牛 (树状数组+二分 | 树状数组的应用)
树状数组+二分,注意题中所引导出的怎么把普通问题转化为树状数组的问题。原创 2022-09-10 12:11:37 · 150 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2 (树状数组 区间加减|区间求和 模板)
树状数组,利用矩阵和的思想进行区间加减和区间求和。原创 2022-09-10 10:51:32 · 164 阅读 · 0 评论 -
AcWing 242. 一个简单的整数问题 (树状数组 区间加减|求单点和 模板)
树状数组模板题,利用差分对区间进行加减操作,最后求单点和。原创 2022-09-10 09:24:15 · 142 阅读 · 0 评论 -
AcWing 241. 楼兰图腾 (树状数组 单点加|求区间和 模板)
【代码】AcWing 241. 楼兰图腾 (树状数组 模板)原创 2022-09-09 22:50:54 · 167 阅读 · 0 评论 -
AcWing 239. 奇偶游戏
①并查集做法:多维护一个d数组,d[i]标识从root到i节点1的个数,之后读入每个问题,对于每个节点进行离散化存储,对已有关系的节点,判断节点之间的1的数量和原来维持的数量是否冲突,如果冲突就输出答案,否则继续。②扩展域解法:在原离散化之后的a的基础上,再加上一个B表示a的偶数情况(b同理),之后用根据关系将同为偶数时加在一个集合内,如果发现奇偶性冲突时就记录答案,退出循环,输出。原创 2022-09-09 18:42:29 · 904 阅读 · 0 评论 -
AcWing 238. 银河英雄传说
并查集,多维护一个i到p[i]的距离数组,注意数组合并时的操作。原创 2022-09-08 11:19:21 · 89 阅读 · 0 评论 -
AcWing 237. 程序自动分析
【代码】AcWing 237. 程序自动分析。原创 2022-09-08 09:39:39 · 75 阅读 · 0 评论 -
AcWing 1252. 搭配购买
又顺带复习了一下01背包问题。并查集+01背包问题。原创 2022-09-07 22:22:58 · 108 阅读 · 0 评论 -
AcWing 1250. 格子游戏
并查集模板题,注意二维坐标转化为一维坐标的巧妙用法。原创 2022-09-07 21:57:09 · 682 阅读 · 0 评论 -
回文自动机(最基础版)
搞了一天多的回文自动机,总算勉强明白了一些,先记录一下最简单的。原创 2022-09-06 22:49:49 · 185 阅读 · 0 评论 -
AcWing 2521. 数颜色 题解
这里的时间的意识是当前查询位于哪次修改之后。对于修改操作可以看成一次删除和一次加数的操作,将需要被替换的数删去,然后将新的数加上。在指针移动的过程中,我们先将指针和待查询区间的左右边界匹配,然后再将当前时间和查询区间所在的区间匹配。在代码实现时有个小技巧:假设第 次更新操作,将 更新为 ,那么我们可以在更新完后 swap(a[pos],c[t].col),即将第 次修改的值与原数组中对应位置的值交换,这样下次如果需要撤销修改,可以直接再执行一次修改就行了(同样再进行一次swap),具体看代码。原创 2022-09-03 23:14:09 · 93 阅读 · 0 评论 -
AcWing 2492. HH的项链 (基础莫队)
莫队求的是询问给定区间内不同的数字的个数,使用双指针遍历给定的区间,在这种情况下依然会超时,所以就对询问的区间按照分块(第二关键字是区间右端点)进行排序,这样就可以保证双指针不重复遍历,最大程度降低时间复杂度。只是总结一下大概思路,具体讲解还是听y总的吧。原创 2022-09-03 12:44:21 · 126 阅读 · 0 评论 -
AcWing 1285. 单词 题解(AC自动机)
用f记录一个与这个后缀相同的单词前缀出现的次数(不仅仅是单词出现的次数)原创 2022-07-31 18:19:45 · 101 阅读 · 0 评论 -
AcWing 1053. 修复DNA 题解(状态机DP、AC自动机)
状态机DPS,用ac自动机建立状态机。原创 2022-07-31 16:53:16 · 173 阅读 · 0 评论 -
AcWing 1282. 搜索关键词 题解((AC自动机)Trie+KMP)+bfs)
很早就想学的一个算法,不过以前是真听不懂,好在这次听懂了。希望AC自动机能帮我AC吧。原创 2022-07-31 10:41:56 · 139 阅读 · 0 评论 -
牛客 邻值查找 题解 (链表 + 思路)
这题最妙的地方在于利用p数组将链表每个节点的左右指针都指向了数值相邻的两个节点注意这个节点遍历之后的删除操作#include<iostream>#include<bits/stdc++.h>using namespace std;typedef pair<int, int>PII;const int N = 1e5 + 10;PII a[N], ans[N];int n;int r[N], l[N], p[N];int main(){ c原创 2021-08-27 00:28:42 · 114 阅读 · 0 评论 -
AcWing 826 单链表 题解 (单链表模板)
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N = 1e5 + 10;int head, e[N], ne[N], idx;int m;void init(){ head = -1; idx = 0;}void remove(int k){ ne[k] = ne[ne[k]];}void add_top(in原创 2021-08-26 18:52:05 · 161 阅读 · 0 评论 -
AcWing 827 双链表 (模板)
#include<iostream>#include<cstring>using namespace std;const int N = 1e5 + 10;int e[N], l[N], r[N], idx;int m;int r1 = -1, l1 = -1;void remove(int k){ r[l[k]] = r[k]; l[r[k]] = l[k]; if(k == l1) l1 = r[k]; if(k == r1) r1 = l[k];原创 2021-10-03 20:58:04 · 120 阅读 · 0 评论 -
牛客 Running Median 题解(堆/priority_queue 的运用 + 思路)
原题链接:https://ac.nowcoder.com/acm/contest/1001/D解题思路:建立两个堆,up为升序,down为降序,利用堆会自动排序的性质,输入时,确保两个堆内元素数量相同(或者up多1),在输出之前判断一下,确保元素总量为奇数时,多的那个元素在up内,之后输出up顶部的元素。很巧妙的利用了堆的性质,两个堆会分别按降序和升序排列,确保堆之间互换的元素是最大最小(需要输出或已输出的元素),确保当前以输入的元素中(假设数量为N),按大小排列的:1—N/2在down内,N/2+1—N原创 2021-08-20 19:48:31 · 168 阅读 · 0 评论 -
AcWing 模拟堆 题解 (数组模拟堆的基础操作)(最短路径 优化dijkstra算法 基础)(最短路径)
#include<cstdio>#include<algorithm>#include<string.h>using namespace std;const int N = 1e5 + 10;int h[N], ph[N], hp[N], Size;//①ph[]、hp[]相当于两个指针数组 ②ph[j]=k表示第j个储存进堆的数在堆中的下标为k,hp[k]=j表示在堆中下标为k的数是第j个进入堆的 void heap_swap(int a, int b原创 2021-08-12 19:46:23 · 112 阅读 · 0 评论 -
AcWing 堆排序 题解(手写堆/优先队列priority_queue 模板)
//堆(优先队列)//堆是以完全二叉树的形式存于一维数组(第一个节点为1) #include<iostream>#include<algorithm>using namespace std;const int N = 1e5 + 10;int h[N], Size;int n, m;void down(int u){//输入要操作的节点 int t = u;//将该节点标记 if(u * 2 <= Size && h[u*2] &l原创 2021-08-12 14:00:07 · 244 阅读 · 0 评论