
线性基
吴俊达9812
这个作者很懒,什么都没留下…
展开
-
sgu275 To xor or not to xor O( n * BASE^2 )(没过题,勿用)
求最大异或和子序列的异或和答案。首先我们需要 明确的是 求一组数的线性基,它的结果是固定的,也就是说这个算法,无论你按照什么顺序进行插入,最后得到的b数组都是一样的。并且,最后b数组的异或和一定是最大的异或和(可以用归纳法进行证明)。并且,这个结果一定可以由原数组的一些元素通过异或得到,且每个元素只用一次(因为用两次相当于没有用)。这道题的巧妙之处就在于不用具体地关心选择了原序列的哪些...原创 2019-09-05 19:24:01 · 113 阅读 · 0 评论 -
hdu 3949 XOR(线性基模板)O( n * base^2 )
有一个坑点,就是线性基不会考虑0,所以如果原序列有 0 的话需要特判一下。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 10005;LL a[maxn],n;const int base = 60;LL b[base+1],c[base+1];tem...原创 2019-09-05 20:48:22 · 119 阅读 · 0 评论 -
「BZOJ2115」[Wc2011] Xor
这题真的妙啊。首先,我们不难发现,所有的复杂环都可以拆成若干个简单环异或的结果。所以我们只需考虑简单环即可。引理:任意一条 1 到 n 的路径的异或和,都可以由任意一条 1 到 n 路径的异或和与图中的一些环的异或和来组合得到。而对于含有两条以上 返祖边的 环,我们可以把他拆成 多个 只含有一条 返祖边的 异或和。所以dfs 找环的时候我们可以只考虑只含一条返祖边的环。#incl...原创 2019-09-05 22:23:49 · 115 阅读 · 0 评论 -
bzoj 2844: albus就是要第一个出场(结论)
题意:给定 n(n≤10000) 个数 a1,a2,…,an,以及一个数 Q。将 a1,a2,…,an 的所有子集(可以为空)的异或值从小到大排序得到序列 B,请问 Q在 B 中第一次出现的下标是多少?保证 Q 在 B 中出现。结论:除0以外 每个数都出现一样的次数,且这个次数为 2^( n-| 基 | )#include <bits/stdc++.h>using n...原创 2019-09-05 23:38:31 · 115 阅读 · 0 评论 -
牛客多校 第四场B XOR(模板)
题意:求一个给定n个数组,求下标范围在l和r的数组是否每一个数组都能表示x。线性基求交。注意查询时不需要对线性基进行合并。#include <bits/stdc++.h>#define lc l,mid,x<<1#define rc mid+1,r,x<<1|1using namespace std;typedef long long LL...原创 2019-09-07 19:51:44 · 179 阅读 · 0 评论 -
hdu 6579(在线线性基模板)
题意: 在线查询某一个区间内的 异或最大值。思路:我们对于序列中的每一个点,考虑以这个点为右端点向左进行扩展。记录线性基每一次扩展的位置。 我们考虑通过递推来维护线性基,当从 r 递推到 r + 1时。考虑 第一个 与 a[ r ] 相交的基向量。我们考虑将这一个基向量X替换为 a[ r ] 。这样,然后我们将 X 替换为 X ^ a[ r ] 并将这个向量继续向后插...原创 2019-09-08 21:21:18 · 233 阅读 · 0 评论 -
2017 icpc xian XOR( 在线线性基处理线性基的并 )
题意:最大化 Z=Kor (A[i1]xor A[i2]… xor A[it]) ( L<=i <= R ) ,区间查询思路:注意到,我们可以忽略线性基中 对应 k 的位置为1 的位,所以我们一开始将a数组中的每个数 & ~k#include <bits/stdc++.h>using namespace std;typedef lo...原创 2019-09-09 15:49:02 · 264 阅读 · 0 评论