随笔分类 -  数据结构

摘要:https://www.cnblogs.com/cloudplankroader/p/10988844.html 阅读全文
posted @ 2023-04-27 22:39 80k 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原理 https://blog.csdn.net/RA100FDM/article/details/107460101 例题 https://atcoder.jp/contests/abc291/tasks/abc291_h 代码(示例) https://atcoder.jp/contests/ab 阅读全文
posted @ 2023-04-07 22:02 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:部分编译器支持128bit的整数表示,但是需要手写输入输出。 注意:__int128等价于__int128_t,不存在int128和int128_t。 输出函数: void Print128(__int128 num) { if(num<0) putchar('-'),num=-num; if(nu 阅读全文
posted @ 2022-10-31 16:33 80k 阅读(44) 评论(0) 推荐(0) 编辑
摘要:RMQ 又叫 st表 跳表 本质是倍增动态规划 查询的时候,每次查询使用一个最大的k,使得2^k<=len(r-l+1) 然后找到[l, r]区间中前2^k和后2^k中的最大值,取最大 模板: const int N=200010; const int M=18;//2^M>200010 int n 阅读全文
posted @ 2022-10-18 17:16 80k 阅读(34) 评论(0) 推荐(0) 编辑
摘要:利用归并排序统计逆序对的数量 int n; int nums[500010]; int backup[500010]; LL MergeSort(int l,int r) { if(l==r) return 0; int mid=(l+r)/2; LL res=MergeSort(l,mid)+Me 阅读全文
posted @ 2022-10-18 16:26 80k 阅读(18) 评论(0) 推荐(0) 编辑
摘要:LCP也可以用来进行一个字符串的子字符串的比较 需要预处理lcp[i][j]数组,表示从i开始的后缀和从j开始的后缀的最长公共前缀 lcp[i][j]可以从lcp[i+1][j+1]递推过来 O(n^2)预处理 O(1)查询 和字符串哈希相比,预处理较慢,但是更加准确 int lcp[4010][4 阅读全文
posted @ 2022-10-05 16:38 80k 阅读(146) 评论(0) 推荐(0) 编辑
摘要:字符串哈希可以快速判断两个子字符串是否相等 O(n)预处理,O(1)判断 原理:https://www.cnblogs.com/ydUESTC/p/15722400.html 注意 字符串哈希时后面的字符视为低位,这样方便取一段字符的哈希时先做乘法再做减法。 例题:https://leetcode. 阅读全文
posted @ 2022-10-05 16:16 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:https://atcoder.jp/contests/abc271/tasks/abc271_g 题目的思路为: 构建dp矩阵,dp[i][j][k]表示开始前停在j,结束后停在k,且停下时恰好出现2^i次访问的概率 则dp[i]=dp[i-1]*dp[i-1] (矩阵乘法的中间过程模拟的就是两个 阅读全文
posted @ 2022-10-04 23:39 80k 阅读(40) 评论(0) 推荐(0) 编辑
摘要:AC自动机=Trie+kmp 优化:Trie图 1、kmp 长字符串s和模板串p都以下标1开始。 (1) 求next数组:kmp的next数组存的是p的自匹配,即以p[i]为结尾的后缀能够匹配的最长非平凡(不是自身)前缀。由于非平凡,next[0]=next[1]=0,循环从2开始。 (2)进行匹配 阅读全文
posted @ 2022-09-29 17:39 80k 阅读(73) 评论(0) 推荐(0) 编辑
摘要:1、基本性质 tree+heap=treap 平衡树包含treap 红黑树 splay sbt AVL等等 splay比较常用 treap= ①BST 二叉搜索树 + ②heap 2、set不能做的操作 ⑤和⑥这种与排名相关的操作比较困难 3、treap的实现 思想:让二叉搜索树尽量变得随机(以大根 阅读全文
posted @ 2022-09-28 19:59 80k 阅读(31) 评论(0) 推荐(0) 编辑
摘要:可持久化的前提:数据结构本身的拓扑结构不变 trie、线段树、树状数组、堆等都可持久化 平衡树(一般)需要左旋和右旋,不可持久化 可持久化希望将数据结构的全部修改记录下来(历史版本) 核心思想:只记录每一个版本与前一个版本不一样的地方 1、可持久化Trie 可以发现,绿线表示同一个点,但是下方的子树 阅读全文
posted @ 2022-09-28 16:14 80k 阅读(88) 评论(0) 推荐(0) 编辑
摘要:例题:求解多个长方形之并的面积 https://www.acwing.com/problem/content/249/ 蓝色表示长方形,红色表示扫描线 如下图所示,对于每一个横向的区间,在纵向维护线段树 根据纵向的累计长度,即可对每个横向区间求出面积 求面积的过程中,可以从左到右遍历区间(遍历除第一 阅读全文
posted @ 2022-09-27 19:34 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:pushup是由子节点算父节点 对于懒标记线段树,需要有pushdown函数,将修改向下传播。 对于一个懒标记add,其意义为,给以当前节点为根的子树中(不包含自己)的每一个节点加上add。 查询时,需要将祖先节点上的add值累加到当前节点。 实现方法是,在查询过程中,如果需要递归,则将add标记清 阅读全文
posted @ 2022-09-27 17:32 80k 阅读(36) 评论(0) 推荐(0) 编辑
摘要:https://www.codechef.com/submit/ROCKET_PACK?tab=statement 主要思路为,转化为最短路问题,然后对全部点进行扫描。 active集合按dis排序,remove集合按到达边界排序。 当到某点i时,先根据remove,对到达边界小于i(已经不会被用于 阅读全文
posted @ 2022-08-31 11:27 80k 阅读(49) 评论(0) 推荐(0) 编辑
摘要:KMP自动机可以在O(1)的时间内计算kmp。 KMP自动机数组kmp_auto[i][j]可以表示第i位为'a'+j时的最长前缀长度(此前缀可以包含自身)。 kmp[i]数组,表示第i位的最长前缀长度(不含自身) 可以有kmp[i]=kmp_auto[kmp[i-1]][str[i]-'a']; 阅读全文
posted @ 2022-08-30 20:35 80k 阅读(37) 评论(0) 推荐(1) 编辑
摘要:01字典树用于处理数字的前缀 例题: https://codeforces.ml/contest/1720/problem/D2 题解: https://www.bilibili.com/video/BV1mG4y1a7QS?spm_id_from=333.1007.top_right_bar_wi 阅读全文
posted @ 2022-08-22 16:40 80k 阅读(13) 评论(0) 推荐(0) 编辑
摘要:https://codeforces.ml/contest/1712/problem/E2 题解: https://www.bilibili.com/video/BV1uB4y167ig?spm_id_from=333.1007.top_right_bar_window_view_later.con 阅读全文
posted @ 2022-08-22 10:24 80k 阅读(15) 评论(0) 推荐(0) 编辑
摘要:开放地址法 M一般是N的十倍左右 find用于查找,看返回值是否为INF find用于插入,直接将待插入的值放到find返回的位置 会比unordered_set快5-10倍。 阅读全文
posted @ 2022-08-08 12:37 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:https://www.bilibili.com/read/cv13020375/ https://files.cnblogs.com/files/ECJTUACM-873284962/bigint-10-2-src.7z 作者:C语言编程老师 https://www.bilibili.com/re 阅读全文
posted @ 2022-08-01 10:14 80k 阅读(16) 评论(0) 推荐(0) 编辑
摘要:https://atcoder.jp/contests/abc261/tasks/abc261_e https://atcoder.jp/contests/abc261/editorial/4490 思路是 f[i]=0或1,fun[i]=0或1 fun[0]表示前面的累计操作会把0变为什么数, f 阅读全文
posted @ 2022-07-25 11:21 80k 阅读(23) 评论(0) 推荐(0) 编辑

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