随笔分类 -  数据结构===============

摘要:四毛子算法qwq 大概就是一种可以做到O(n)O(1) RMQ的科技。 大概分三步来讲。 O(n)-O(1) 加减一序列RMQ 把序列按照B=log22分块,那么我们现在有n/B个块。 注意到块内可能的序列变化情况只有O(2B)=O()种,我们显然 阅读全文
posted @ 2021-05-29 02:46 Creed-qwq 阅读(179) 评论(0) 推荐(0) 编辑
摘要:Pro: https://codeforces.com/gym/102028/problem/H Sol: 用SAM枚举不同子串后 问题转换为下面这个形式 q组询问 每次询问包含l,r,x三个参数,求下式 i=lrmax(i,x) 这个东西是个套路题 离线+ 阅读全文
posted @ 2020-12-30 05:43 Creed-qwq 阅读(136) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-10-27 14:52 Creed-qwq 阅读(6) 评论(0) 推荐(0) 编辑
摘要:Pro: Sol: 有这样一个性质:一个1开头的1、2序列可以用区间和表示出1~s[n]的所有数字 #include<bits/stdc++.h> #define N 2200000 #define eps 1e-7 #define inf 1e9+7 #define db double #defi 阅读全文
posted @ 2020-10-20 18:06 Creed-qwq 阅读(164) 评论(0) 推荐(0) 编辑
摘要:ZJOI2019最水的一道题,考场上想出了正解却死活调不出来。。 然后就一直咕到了现在(逃 题目求的那个东西可以转化为这样一个东西。 有一些操作,你可以决定每个操作是否执行,动态查询所有可能的情况中线段树上权值为1的节点个数的总和。 然后很自然的(虽然看起来有点奇怪,但真的就很自然的能想到!)想到把 阅读全文
posted @ 2019-04-27 22:57 Creed-qwq 阅读(130) 评论(0) 推荐(0) 编辑
摘要:考虑拆位,计算每一个二进制位的贡献。 问题转化为求一个01矩阵的全0/1的子矩形个数。 考虑计算以第i行第j列为右下角的合法子矩形个数。 发现合法的左上角范围向左是单调下降的。 可以用一个单调栈来维护合法的范围。 这样做总复杂度O(n^2logn) cpp include define N 2200 阅读全文
posted @ 2019-04-26 08:05 Creed-qwq 阅读(176) 评论(0) 推荐(0) 编辑
摘要:很像LNOI 2014 LCA那道题。 同样的套路,离线以后直接扫描线。 k=1的话就是原题。 考虑一般情况。 原本的做法是对x到根的这条链做一下区间+1操作,目的是为了是的在深度为i的位置得到的贡献是i。 因此,我们只需要构造出一个任意一个位置都满足前缀和为i^k的序列即可。 然后每次把这个序列加 阅读全文
posted @ 2019-04-25 20:24 Creed-qwq 阅读(227) 评论(0) 推荐(0) 编辑
摘要:题目的含义可以看做是以权值为下标的一些柱子,每个柱子的高度就是这个权值的出现的次数。 然后把这些柱子向左推倒,一个高度为h的柱子的影响范围为i−h+1∼i。 那么答案就是查询1∼n的这段区间没有被覆盖的点的个数。 因为所有没有被覆盖的位置都需要且可以通过一次更改使得能被推倒。 考虑线段树维护这个东西 阅读全文
posted @ 2019-04-25 07:45 Creed-qwq 阅读(142) 评论(0) 推荐(0) 编辑
摘要:注意,题意的意思是已经有了一些椅子。 如果要加椅子的话,显然每次加入的椅子都应该是可以和任何一个人匹配的椅子。(即位置为1或者m) 考虑最少需要加入的椅子数量。 根据霍尔定理,假设现在有一个集合|s|和它的连边集合|t|。 如果|s| |t|=k的话,我们至少需要加k把椅子才能满足条件。 因此,最少 阅读全文
posted @ 2019-04-08 21:51 Creed-qwq 阅读(362) 评论(0) 推荐(0) 编辑
摘要:https://loj.ac/problem/6062 直接套用霍尔定理。 由于A有多个选择,考虑维护B是否合法。 首先B数组的顺序显然是没有用的,可以直接排序。 然后每个A就都变成了向一个后缀连边。 对于B,原本需要check每一个集合是否满足|u|=0 因此,只需要维护F【i】 的最小值即可。 阅读全文
posted @ 2019-04-08 21:07 Creed-qwq 阅读(276) 评论(6) 推荐(0) 编辑
摘要:https://www.luogu.org/problemnew/show/P3312 比较nb的一个题。 首先考虑没有a的限制怎么搞。 把d提到前面 mobius反演一下 令T=dx,把T挪到前面(没想到这一步!) 设F(x)=d(x)和mu(x)的狄利克雷卷积。 然后考虑怎么带上a的限制,只要能 阅读全文
posted @ 2019-03-31 21:15 Creed-qwq 阅读(172) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.org/problemnew/show/P4384 容斥一下考虑计算切两刀使得三个串都不存在的s[l,r]的方案数。 分类讨论一下。 1.有三个互不相交的目标串 此时显然无解。 2.最左边的目标串和最右边的目标串相交 画一下图可以发现。 答案是一个sigema ( 阅读全文
posted @ 2019-03-21 09:03 Creed-qwq 阅读(116) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2019-03-19 02:44 Creed-qwq 阅读(4) 评论(0) 推荐(0) 编辑
摘要:这是一种经典的单调栈+线段树的维护方法。 从左到右枚举右端点。 线段树维护每一个左端点的max(+ or )min的值。 每次右端点移动的时候,把a[i]加入单调栈。 每弹栈一次,便在线段树上把对应弹掉的区间加上a[i] a[s[top]]。 时间复杂度是均摊O(nlogn)的。 阅读全文
posted @ 2019-03-12 06:55 Creed-qwq 阅读(215) 评论(0) 推荐(0) 编辑
摘要:先把所有询问离线一下。 从右向左枚举左端点,线段树维护每一个右端点的答案。 (这里的每一个右端点包含的答案只包括以它为右端点的当前最小的差值) 因此对于询问l,r,应该查询线段树l,r的区间最小值。 每次左端点移动的时候,暴力的做法是直接for过去更新每一个位置。 考虑怎么优化。 先考虑更新比左端点 阅读全文
posted @ 2019-03-11 23:13 Creed-qwq 阅读(213) 评论(0) 推荐(0) 编辑
摘要:考虑维护出每一个点左边第一个比它大的位置,右边同理,这样有一个合法区间。 然后对询问离线,由于要求只包含区间内的贡献,扫描线+线段树解决。 T1 http://codeforces.com/problemset/problem/1117/G 考虑一下笛卡尔树,然后分析出答案等于这个区间形成的笛卡尔树 阅读全文
posted @ 2019-02-23 15:48 Creed-qwq 阅读(473) 评论(0) 推荐(0) 编辑
摘要:直接对树dfs一发,对每个节点建出主席树。 查询的时候主席树上二分,四个参数x+y-lca(x,y)-fa[lca(x,y)]。 如果要求支持动态加边的话,只需要一个启发式合并即可,每次暴力重构主席树。 阅读全文
posted @ 2019-02-08 05:09 Creed-qwq 阅读(280) 评论(0) 推荐(0) 编辑
摘要:考虑到路径是有向的,不是很好维护。 如果路径无向的话,可以直接转化为链加和查询操作。 既然有向的话,不妨考虑一波hash。 对于一组询问x,y,可以把树划分为两颗子树。 合法显然需要满足 x子树的起点的hash=y子树的终点的hash x子树的终点的hash=y子树的起点的hash 直接用LCT维护 阅读全文
posted @ 2019-02-07 06:30 Creed-qwq 阅读(144) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示