上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 28 下一页
摘要: 直接爆搜的复杂度是2^n,对于n define N 110000 define L 100000 define eps 1e 7 define inf 1e9+7 define db double define ll long long define ldb long double using na 阅读全文
posted @ 2019-03-13 21:48 Creed-qwq 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题目:https://www.luogu.org/problemnew/show/AT2112 对于这种找路径的就直接上点分治就好。 分治时,算出每一个点到分治重心的后能剩多少油,从分治重心走到每个点最少需要多少起始油量。 对这两个数组排序后合并即可。 注意,合并的时候要保证不属于同一棵子树,这个可 阅读全文
posted @ 2019-03-13 20:49 Creed-qwq 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 考虑什么时候区间长度=区间mex 把点按照权值从1到n顺序加入。 枚举权值的右端点,线段树维护每一个点的点数 边数。 点数显然很好维护,边数的话,考虑右端点移动以后,新加入一个数字。 看一下和它相邻的两个数字,如果比它小的话,就在线段树上做一次区间减法。 查询的时候,线段树上权值为1的位置即为合法区 阅读全文
posted @ 2019-03-12 07:12 Creed-qwq 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 这是一种经典的单调栈+线段树的维护方法。 从左到右枚举右端点。 线段树维护每一个左端点的max(+ or )min的值。 每次右端点移动的时候,把a[i]加入单调栈。 每弹栈一次,便在线段树上把对应弹掉的区间加上a[i] a[s[top]]。 时间复杂度是均摊O(nlogn)的。 阅读全文
posted @ 2019-03-12 06:55 Creed-qwq 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 先把所有询问离线一下。 从右向左枚举左端点,线段树维护每一个右端点的答案。 (这里的每一个右端点包含的答案只包括以它为右端点的当前最小的差值) 因此对于询问l,r,应该查询线段树l,r的区间最小值。 每次左端点移动的时候,暴力的做法是直接for过去更新每一个位置。 考虑怎么优化。 先考虑更新比左端点 阅读全文
posted @ 2019-03-11 23:13 Creed-qwq 阅读(212) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-03-10 22:19 Creed-qwq 阅读(12) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-03-03 10:09 Creed-qwq 阅读(6) 评论(0) 推荐(0) 编辑
摘要: FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> #define N 1100000 #define eps 1e-7 #define inf 1e9+7 # 阅读全文
posted @ 2019-03-01 15:40 Creed-qwq 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 真·毒瘤题 这个题面写错了一句话。要求的是每个节点的石子树 =它的两个儿子石子数的和。 首先考虑怎么算石子分配的方案。 如果对这棵树每个节点的石子数都和儿子差分一下的话,可以唯一对应一颗每个点都要一个 =0的权值的树。 且这棵树的权值和为x。 那么就可以插板法算一下了,因此它与树的结构无关,只与大小 阅读全文
posted @ 2019-02-28 20:16 Creed-qwq 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 每个串拆成两个,都插入trie数。 把trie树建出来后,每一条从根到叶子的链上最多只能有一个变量为1。 这是个经典的前后缀优化2 sat建图的套路。 树上的做法也就是边dfs边做而已。 cpp include define N 3300000 define eps 1e 7 define inf 阅读全文
posted @ 2019-02-28 09:56 Creed-qwq 阅读(275) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 28 下一页