题解:
首先我们处理出来sum[0,n]sum[0,n]作为异或前缀和,然后答案就不再是[l,r][l,r]中间某段区间的异或和,而转化成求了[l?1,r][l-1,r]中任意两点异或和的最大值。
然后我们分块处理出fi,jf_{i,j}表示 [第i块的开头,j?1][第i块的开头,j-1] 这段区间中任取一点和点jj异或和的最大值,而用gi,jg_{i,j}做个类似前缀和的操作,记录第ii块...
分类:
其他好文 时间:
2015-03-20 22:07:44
阅读次数:
223
const maxn=600008; len=24;var x,y,z,n,m,tot,lx,i:longint; sum:array[0..maxn] of longint; rt:array[0..maxn] of longint; time,l,r:array[0....
分类:
其他好文 时间:
2015-03-20 17:59:54
阅读次数:
115
题目:http://www.tsinsen.com/A1486题解: 其实看到和路径有关的就应该想到点分治。 我们找出重心之后遍历每一棵子树得到它的 { x=经过特殊点的个数,y=到rt的异或和} 然后我们按x排序,维护两个头尾指针不断把满足条件的加入trie,然后把左边的放进tr...
分类:
其他好文 时间:
2015-03-19 23:31:29
阅读次数:
249
块状树,每个块的根记录一下当前块内距块根为奇数距离的异或和和偶数距离的异或和,询问的时候讨论一下即可。总的节点数可能超过50000。#include#includeusing namespace std;#define N 100001int n,m,L,a[N];int en,v[N<<1],ne...
分类:
其他好文 时间:
2015-03-16 08:39:44
阅读次数:
649
由于异或运算满足结合律,我们把当前状态的SG函数定义为 它所能切割成的所有纸片对的两两异或和之外的最小非负整数。#include#include#includeusing namespace std;int n,m,SG[201][201];int sg(int x,int y){ if(SG[x]...
分类:
其他好文 时间:
2015-03-14 09:36:12
阅读次数:
152
传送门:S-Nim题意:给n个数的集合s, 再给m 组数据,每组表示 k 堆石子,每次可以取的个数只能是集合s中的数量。问先手胜还是输?分析:sg函数的经典运用,先预处理出所有数量为0~10000的石子的sg值,然后判断k堆石子的sg值异或和是否为0来判断先手的输赢。#include #includ...
分类:
其他好文 时间:
2015-03-10 20:56:21
阅读次数:
128
考虑树状数组区间修改(只对其子树的答案有影响)点查询,每个点记录的是它到根路径上的权值异或和。答案时query(L)^query(R)^a[lca]。这种方法在支持区间加法、减法的树上询问的时候可以避免树链剖分。可能爆栈,考虑手动开栈。(诶诶Tarjan预处理lca的时候怎么没手动开栈?不要在意^_...
分类:
编程语言 时间:
2015-03-09 22:26:08
阅读次数:
216
把每一行m个数所有的素因子看做一堆,就把问题转化为n堆的Nim游戏。然后预处理一下10000以内每个数素因数的个数,再根据书上的Bouton定理,计算一下n行素因数个数的异或和。为0是先手必败局面,输出NO,否则输出YES 1 #include 2 #include 3 4 const int...
分类:
其他好文 时间:
2015-03-09 14:23:26
阅读次数:
173
对原序列取前缀异或值,变成pre[1...N],然后询问等价于求max{a[N]^x^pre[i]}(l-1#define INF 2147483647#define N 300001#define MAXBIT 25int root[N=0;--i) { int Bit=(...
分类:
其他好文 时间:
2015-03-06 12:39:52
阅读次数:
105
题目大意:给定一张带权无向图,每次删去一条边并询问从点1出发走一条路径可以走出多少种不同的边权异或和
删边不好做 首先倒着做 把删边改成加边
回忆2115那题的做法 我们可以把一条路径的异或和拆成一条简单路径和一些环的异或值
2115是求最大异或和 这个题是求异或和的个数
因此我们维护两个集合 环的异或和集合和路径的异或和集合
这里说的路径包括原地不动 即从1到...
分类:
其他好文 时间:
2015-02-04 21:56:02
阅读次数:
215