
我的板子
monster&&summit
我一直在进步
展开
-
【我的板子】线段树(区间加、异或)
文章目录简述简述线段树原理也懒得写了,我主要是来记板子的。适用于:用o(logn)实现区间修改和查询问题用法:我一般是弄个结构体数组,里面存需要查询的区间和、区间最大值、区间最小值、区间乘积、加标记,乘标记,异或标记等题目提到的东西。注意:申请空间一般是他给的数组大小的四倍。只申请这一个树的空间也不行,还得有一个数组去存原数据。...原创 2020-07-15 18:30:20 · 1324 阅读 · 1 评论 -
【我的板子】manacher
文章目录问题描述一、朴素算法二、manacher算法分奇偶处理时优化算法为什么不用分奇偶讨论了呢问题描述给定一个字符串s,找出所有(i,j)使得s[i……j]为回文串。(回文串就是正看倒看都一样的串)一、朴素算法分该回文串是奇数串还是偶数串,遍历中心位向两边延伸vector<int> d1(n), d2(n);for (int i = 0; i < n; i++) { d1[i] = 1; while (0 <= i - d1[i] && i +原创 2020-07-11 14:09:57 · 149 阅读 · 0 评论 -
【我的板子】用前缀函数和Z函数实现KMP
文章目录一、前缀函数知识二、用Z函数实现1、什么是Z函数?首先我们可以暴力计算这个Z函数Z函数一、前缀函数知识点击查看给定一个文本t和一个字符串 s ,我们尝试找到并展示 s 在 t中的所有出现。为了简便起见,我们用n 表示字符串 s 的长度,用m 表示文本t 的长度这种在一个字符串中查找另一个字符串的出现位置和次数,我们可以处理成一个字符串str=s+’#’+t;就转化成了在str中找最长公共前后缀长度为s.size()的位置,并记录个数vector<int> prefix_fu原创 2020-07-11 11:30:10 · 274 阅读 · 0 评论 -
【我的板子】前缀函数
文章目录一、点击查看参考及定义二、计算前缀函数的朴素算法三、前缀函数的第一个优化四、第二个优化一、点击查看参考及定义给定一个长度为 n 的字符串 s,其前缀函数被定义为一个长度为 n 的数组 pi 。主要就是来求一个字符串从第一个字符开始的每一个子串的前缀后缀相等的最长长度。比如:求abcab的前缀函数求得就是a的前缀后缀最长的长度:1ab的前缀后缀最长的长度:0abc的前缀后缀最长的长度:0abca的前缀后缀最长的长度:1abcab的前缀后缀最长的长度:2所以要求一个字符串的前缀后缀原创 2020-07-11 10:00:28 · 840 阅读 · 0 评论 -
【我的板子】康托展开与逆康托展开
康托展开用于求给一列数,让你求它是全排列的第几个数总结康托展开公式为:rank=an(n−1)!+an−1(n−2)!+⋯+a10! 表示原排列中,排在下标 i 后面的,比下标 i 的字符还小的字符个数。当然,如果排名是从 1 开始的话,最终结果应当再 + 1。比如【2 3 4 1】排在2后面的比2小的有1个(1)rank+=1*(4-1)!排在3后面的比3小的有1个(1)rank+=1*(4-2)!排在4后面的比4小的有1个(1)rank+=1*(4-3)!排在1后面的比1小的有0个(原创 2020-06-24 09:49:47 · 193 阅读 · 0 评论 -
【我的板子】素数:埃式筛法、线性筛法、欧式筛法
埃式筛法与欧式筛法比他的时间复杂度会高,因为会重复处理多用于检验某范围内的一个数是不是素数#include <bits/stdc++.h>using namespace std;int prime[10000005];const int N = 10000000;void isprime(){ fill(prime,prime + N,true); prime[1] = false; for(int i = 2; i <= N; ++i) {原创 2020-06-24 09:07:16 · 1289 阅读 · 1 评论