随笔分类 - 数据结构
摘要:"link" 题目大意: 你需要维护一个树 每个点都有个sin(ax+b)或exp(ax+b)或ax+b 你需要维护一些操作:连边、删边、修改某个点的初等函数、询问某条树链上所有函数带入某个值后权值和或不连通 保证x在[0,1],带入后得到的值在[0,1] 允许精度误差在1e 7 题解: 由于sin
阅读全文
摘要:对字符串构建一个后缀自动机. 每次查询的就是在转移边上得到节点的parent树中后缀节点数量. 由于强制在线,可以用动态树维护后缀自动机parent树的子树和。 注意一个玄学的优化:每次在执行连边操作时,让parent节点作为x,新节点作为y,否则在一串字符相同的串会被莫名其妙卡成N方。 压行后的l
阅读全文
摘要:一个没有维护任何东西的动态树模板 忘了怎么写可以直接来粘 upd:压行Link Cut Tree模板
阅读全文
摘要:"link" 题目大意:维护一个序列 支持: 1.单点插入 2.单点删除 3.区间翻转 4.区间旋转 5.区间加 6.区间赋值 7.询问区间和 8.询问区间极差 9.询问区间与给定某个数差值绝对值的最小值 10.询问区间第k小 11.询问区间某个数排名 艹 11个操作 太毒瘤了 写了一下午+晚上一节
阅读全文
摘要:"link" 题目大意:给定一个N个点的树,每个点有一个颜色 有M次操作,每次可以修改树某条链所有点变成一个颜色,查询某条链上点的颜色段数 树剖,线段树维护区间合并 我的代码记录的是某个区间左端点颜色、右端点颜色、除了左端点和右端点的颜色段数 需要稍微特殊处理一些情况,详见代码
阅读全文
摘要:个人感觉可能是最不需要脑子写的方法 不过也不太好调 就是用一个普通的线段树维护这个序列,但是对于线段树的每一个区间,再开一个动态开点的权值线段树,里面存储这个区间所有元素值 单点修改只会涉及到log棵权值线段树的单点修改(不用打lazy太棒了 log^2 查询区间内x的排名相当于查询区间内 incl
阅读全文
摘要:已更新 一句话题意:给棵树,有点权有边权 单点修改点权,维护带权重心 观察了各位dalao的博客依旧是没看透彻。。。 最后观察了gxz大佬把代码写完的... 我们先跑一遍点分治,建点分树(代码里的father数组) 跑一遍dfs,预处理倍增lca求dis(代码里的fa,depth,dis数组) 对于
阅读全文
摘要:给定一个无向图,点有点权边有边权 Q次询问,每次询问从点v开始只经过边权 using namespace std; struct edge { int u, v, w; } a[500010]; int n, m, q; int h[200010], dfn[200010], dfntot; int
阅读全文
摘要:(仅作备忘) dfs序是dfs过程中对于某节点进入这个节点的子树和离开子树的顺序 满足每个节点都会在dfs序上出现恰好两次 任意子树的dfs序都是连续的 欧拉序是dfs过程中经过节点的顺序 每个节点至少出现一次(事实上出现这个节点的度次,根节点额外一次) 有时候用来配合稀疏表求最近公共祖先 dfn序
阅读全文
摘要:这题就没人用并查集吗,我弱弱地问一句 然而是先并,后查的 建立一个带权并查集 表示节点x到他直接父亲的异或值 根据异或的可乱搞的性质 注意并查集一定要先getf一下 然后合并同根据异或可乱搞的性质(rt所示) mspaint真心毒瘤 查询的时候先getf一下 然后直接 即可 cpp include
阅读全文
摘要:提供一种单调队列做法(非正解) 显然每一个丑数能够由一个质数乘以另一个丑数得到 所以我们开k个单调递增队列,每次从这些队列顶部找到一个最小的元素把他捞出来,然后枚举所有质数,用这个元素乘以质数,放入相应的单调队列里。找到的第n个数就是所求的丑数。由于会有重复,但是取出元素的顺序是单调的,所以开一个l
阅读全文
摘要:先说一个小trick,一开始我们把他赋值成是红、白相间的,查询就查询的是全红或全白即可。 然后就可以做啦 题解里面好像都是线段树 暴力的题解好像都被del了 貌似暴力交上去也过不了了 然后我想说 分块大法好! 把同学们他分成$\lfloor\sqrt N\rfloor$块 每块维护八个信息: 左边连
阅读全文
摘要:分享一个非正解的做法 本题解内存最低($\le1\rm MiB$) 但是不开O2会tle 思路:每个数字仅会更新出1个新的数字,而且这个新数字比旧数字最多也就大70多。所以这里还是利用“筛数”的思想枚举所有数字筛数字,但这里我开一个小根堆来存储当前已经被发现 不是自我数 但是 还未被遍历到 的数字。
阅读全文
摘要:【模板】树状数组 1 点我 代码: 【模板】树状数组 2 点我 代码: 关于lowbit: 大家看看这张图,我列举出了各个元素的lowbit值。我们可以发现,lowbit(x)=father(x)-x。father[x]代表x的父亲(比如图中1的父亲是2,3的父亲是4,6的父亲是8)。 另外我们还可
阅读全文
摘要:单调队列 (题面:http://poj.org/problem?id=2823) 题意就是给一堆数和一个窗口,求窗口滑到某一位置时里面的最小值最大值 于是乎我们有了单调队列做法 这题用STL的双端队列貌似会RE,自己写一个就好了 我们以最小值为例: 8 3 1 3 1 3 5 6 7 8(注意和题面
阅读全文
摘要:我们都知道树状数组可以单点更新、区间求和,其实树状数组还可以区间更新,单点求值
阅读全文
摘要:原题目:点我 模拟即可,字符串处理麻烦点。如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹。 提示:高能,指针+动态内存,用数组太low(在noip中用数组才是王道!)
阅读全文
摘要:(来自luogu)原题目 lowbit(x)=2^k次幂,k为x末尾0的数量。大家可以模拟试试lowbit (-x)=(~x)+1,把x取反+1 void update(int x,int k)表示a[x]+=k(单点更新) int sum(int x)表示求1-x区间和 求x-y区间和只需要sum
阅读全文

浙公网安备 33010602011771号