摘要:
#include<iostream> #include<stack> using namespace std; //stack<int>q;//栈q int n,m,t; const int N=1100; int a[N],sum=1;//入栈队列a,待检验队列b,计数器sum int main( 阅读全文
摘要:
习题集P79。编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。现在给定一个随机数m>0,从编号为1的人开始,按顺时针方向1开始顺序报数,报到m时停止。报m的人出圈,同时留下他的密码作为新的m值,从他在顺时针方向上的下一个人开始,重新从1开始报数,如此下去,直至所有的 阅读全文
摘要:
1.有点后序遍历的思想,就是先把左子树,右子树的结果算出来,然后合并到根节点。 2.合并时四种情况分类讨论. 3.对于遇到要找的点就可以直接返回,不管另一个点在这个点下面还是在别的子树上,都是正确的 int n, m; int a[N]; int query(int root,int x,int y 阅读全文
摘要:
利用前序遍历的特性,如果左子树不空,下一个一定是左节点,不然就是# 因为是转中序遍历,就在两次遍历之间输出 #include <iostream> #include <cstring> #include <algorithm> using namespace std; int k; string s 阅读全文
摘要:
一切的核心是怎么利用中序和按层遍历构建二叉树? 1.优化空间很大,可以提前预处理记录每个数对应的位置,还可以vis数组记录这个点是不是已经作为根了。 2.我们考虑到每次找到当前中序要处理区间,里面的数记为集合mid,我们从前到后看层序遍历中的哪个数最先出现在mid中。那么这个数就是当前中序处理区间的 阅读全文
摘要:
1.就算不知道用vector的初始化,也可以手动赋值创建子数组。 2.不断找到当前序列对应的根节点,计算他的子节点的总和,在这样递归处理过程中,注意要中序输出,所以对于是先遍历完左子树,然后输出答案,然后遍历右子树 #include <bits/stdc++.h> using namespace s 阅读全文
摘要:
https://www.acwing.com/problem/content/3601/ 不断找新的先序的根节点,根据位置切割中序,根据中序左右子树大小反切割先序,找到左子树对应的先序中序,然后递归处理 #include<stdio.h> #include<vector> #include<map> 阅读全文
摘要:
hh的项链:不带修改维护区间种类数 https://www.luogu.com.cn/problem/P1972 树状数组做法 https://zhuanlan.zhihu.com/p/272804539 #include<bits/stdc++.h> using namespace std; in 阅读全文
摘要:
输出一个整数,表示a*b mod p的值。 数据范围 1≤a,b,p≤1018 ll qadd(ll a, ll b, ll p) { ll res = 0; while (b) { if (b & 1) res = (res + a) % p; a = (a + a) % p; b >>= 1; 阅读全文