- 博客(9)
- 收藏
- 关注
原创 【代码记录】LIS最长上升子序列简单思路+模板
首先区分子序列和子串的区别,子串必须是连续的,子序列可以是不连续的例题https://www.luogu.com.cn/problem/P1020算法一:贪心加二分实现(时间复杂度 :n*log(n))函数:lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。upper_bound(ForwardIter first, ...
2022-02-20 16:46:36
540
原创 【代码记录】优化朴素并查集和两种并查集类型模板
优化朴素并查集朴素并查集用数组存储元素,当数据很大或者数据量很多的时候,会导致无法查询,或者时间复杂度大幅上涨,可以用unordered_map来存储结点,unordered_map内部是哈希表,查询速度快...
2022-02-13 16:53:05
96
原创 【代码记录】进一步理解kmp中的next数组
kmp是一种改进的字符串匹配算法在字符串的匹配问题中,最坏情况下可能需要将目标串全部走完才能完,对于最朴素的做法而言,时间复杂度可能达到O(子串*目标串),当目标串非常长时,时间复杂度也会非常大。这时候就需要kmp算法来优化。在对kmp算法有所了解后,我们知道kmp的重点就在于求出next数组,更深入的了解next数组可以做题:https://www.luogu.com.cn/problem/P4391https://www.luogu.com.cn/problem/UVA10298ht
2022-01-30 12:43:51
1223
原创 【代码记录】线段树的区间修改与区间查询
线段树是一种二叉搜索树,线段树将一段区间划分为若干个单位区间,每一个结点对应着原线段区间的一段,线段树维护的问题需要满足区间加法例题:https://www.luogu.com.cn/problem/P3372线段树的建树typedef long long ll;void build(int p,int l,int r){ tre[p].l=l;tre[p].r=r; if(tre[p].l==tre[p].r) {//如果左右子树相等,就是叶子 tre[p].sum=a.
2022-01-21 21:53:55
467
原创 【代码记录】单调队列
单调队列:队列中的元素都具有单调性,队尾和队头都可以进行出队操作,只有队尾可以进行入队操作。例题:QVQ给定一个数组和一段滑动窗口求这段滑动窗口内的最大值。思路:如果要快速找出最大值,我们可以用一个双向单调队列来维护,队列放的是元素下标,假设队头是当前最大值元素的下标,每次移动窗口就是输出队头下标所表示的元素,为了能更快找到最大元素,队列中只保存可能成为最大值的下标。可以分为两个过程来实现:1.维护窗口长度,如果队列长度超过要求就删除队头元素2.维护窗口单调性,以单调递减为例,队列中
2022-01-14 11:00:30
116
原创 【代码记录】 多重背包的二进制优化与单调队列优化
多重背包问题有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。求最大价值二进制优化(例题:QAQ)简单思路;将每件物品的数量分情况讨论,如果物品数量乘物品的体积大于背包的体积那么就可以看做一个完全背包,否则将第i种物品分成若干件物品,其中每件物品有一个系数,这件物品的费用和价值均是原来的费用和价值乘以这个系数。使这些系数分别为1,2,4,...,2^(k-1),n
2022-01-09 19:51:34
335
原创 HNCPC2021 D:Sum Them
思路:先把第一项,即从1到m的累乘求出来,然后从第2项开始,每次都乘i+m-1然后除去i-1,因为要取模,所以乘逆元。我们可以先把从1到2x10^6的所有逆元求出来,然后再直接调用,因为数量较多,可以采用线性求逆元的方法inv[1]=1; for(int i=2;i<=M;i++) inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;#include<iostream>using namespace std;typedef long lo
2021-12-06 21:01:38
813
原创 HNCPC2021 C题 Average of Two Numbers
思路:先将给出的数分为奇数和偶数,在根据奇偶统计总共有多少数满足条件,本题应该用unordered_map,unorderd_map的查找速度比map快#include<iostream>#include<unordered_map>using namespace std;typedef long long ll;unordered_map<ll,ll>tt;ll a[1010],ans(0),sum(0),fum(0),c[1010],d[1010];
2021-12-06 18:37:10
910
1
原创 2021-04-22
一道错排问题题目:上周周赛结束了,每个同学都有一个排名,且不存在并列情况zks在统计协会周赛排名的时候,意外的将一部分同学排名统计错了。请问,zks将所有同学排名都统计错误的情况有多少种?输入第一行输入为一个整数n,代表有n名同学(1≤n≤15)输入:3;输出:2;首先要写出这道题就要了解什么是错排,错排就是将n个数放到n个位置上,再让你打乱顺序,使每个数与之前的标号都不一样这样,我们就可以将排序分为两个部分:第一,放置第一个数,有n-1种选法。然后,将剩下的..
2021-04-22 23:18:16
104
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人