10 2021 档案
摘要:这是啥? 栈是一种数据结构,遵循先入后出(FILO)原则。 具体来说,可以把栈想象成一堆书。 如果要把一本书放进书堆里,就要把这本书放在这堆书的最上面。 如果要拿出书堆中的一本书,就要从这堆书的最上面拿出这本书。 代码怎么写? 手写栈用数组模拟即可,这里不再过多介绍。 如果要使用 STL 栈,需要
阅读全文
摘要:栈 普通栈 P1739 P1449 单调栈维护单调子序列 P2866 P2947 P5788
阅读全文
摘要:可以想到一个结论:(不会证) 在原字符串中的相同字符,经过操作后相对位置不变。 思路 我们可以给 'a'-'z' 每个字符开个数组, 它们各自在目标字符串中的出现位置存到一个“桶”里。 然后再把这个“桶”对应到原字符串里,就会得到一个数组。 比如说,aabcba 这个字符串,它的目标字符串就是 ab
阅读全文
摘要:看几个常见问题: Q1: 这题连状态都没有,怎么搜? A1: 从低位到高位一位一位地搜,把当前的数字当成状态。 Q2: ,质数怎么筛? A2: 先写个正常的筛: for(int i = 2;i <= 10000000;++i) {if(!np[i]) pri[cnt++] = i;
阅读全文
摘要:题意 一个数列,每次操作把一个位置改成 1, 每次操作后,求数列中有多少段连续的 1。 思路 分类讨论,考虑每次操作的位置的左右两边的数(只是两个数): 左右两边的数都是 0:...0 1 0... 这个位置单独构成一段,答案加一。 左右两边的数都是 1:...01...1 1 1...10...
阅读全文
摘要:A 科普 getline 在 OI 中,经常用 getline(cin, s) 读入一行(包含空格)到 s 中。 string::find 假如有两个叫 a,b 的 string。 那么 a.find(b) 返回 b 在 a 中第一次出现的位置的下标。 如果 b 没有在 a 中出现过,返回 -1。
阅读全文
摘要:前置知识:线段树求区间最大值 思路 先考虑暴力的做法: 开一个桶 ,记录当前区间内的值出现个数。 我们可以发现,每次区间移动后,不需要重新统计, 只需要把 新加入区间的值 ++, 退出区间的值 --即可。 询问时输出出现次数最多的值的个数,也就是
阅读全文
摘要:引入 给你一个矩阵,你需要维护一种数据结构,要 询问子矩阵和,应该怎么写? 我们都知道,一维的子段和可以前缀和维护,可以考虑把前缀和扩展到 2 维。 假设二维前缀和矩阵是 ,也就是 $s_{xy}=\sum\limits_{i=1}^x\sum\limits_{j=1}^ya_{
阅读全文
摘要:考场脑抽T2读错题了 T1 签到题。 模拟大家都会,下面是 做法: #include <iostream> using namespace std; int w, k, a, n; int main() { cin >> w >> k >> a >> n; if(n > k) cout
阅读全文