题目大意:给定一个序列,提供下列操作:
1.在数组结尾插入一个数
2.给定l,r,x,求一个l
首先我们可以维护前缀和 然后就是使x^sum[n]^sum[p-1]最大
x^sum[n]为定值,于是用Trie树贪心即可
考虑到l-1
每个区间[l,r]的Trie树为tree[r]-tree[l-1]
注意0要插入一个数字0,所以把-1作为空节点,然后把数组向前推进一位即可
#inc...
分类:
其他好文 时间:
2014-10-14 11:13:48
阅读次数:
206
本节介绍Knuth-Morris-Pratt字符串匹配算法(简称KMP算法)。该算法最主要是构造出模式串pat的前缀和后缀的最大相同字符串长度数组next,和前面介绍的《朴素字符串匹配算法》不同,朴素算法是当遇到不匹配字符时,向后移动一位继续匹配,而KMP算法是当遇到不匹配字符时,不是简单的向后移一位字符,而是根据前面已匹配的字符数和模式串前缀和后缀的最大相同字符串长度数组next的元素来确定向后移动的位数,所以KMP算法的时间复杂度比朴素算法的要少,并且是线性时间复杂度,即预处理时间复杂度是O(m),匹配...
分类:
其他好文 时间:
2014-10-09 16:36:14
阅读次数:
176
题目大意:给定整数N(N
思路:推一推。
设gcd(x,y) = p,则x / p与y / p互质
问题就转化成了N / p中有多少个数互质,然后累加就可以了.
=>对于任意a,b,a
=>gcd(a,b) == 1
现在问题就很明显了,看到这个形式就很容易想到欧拉函数,求一下phi,算一下前缀和,累加。
注意这里求欧拉一定要线性的,1qw的数据,nloglogn都很悬。...
分类:
其他好文 时间:
2014-10-08 12:45:35
阅读次数:
234
题目地址:HDU 1559
构造二维前缀和矩阵。即矩阵上的点a[i][j]表示左上方的点为(0,0),右下方的点为(i,j)的矩阵的和。然后枚举每个矩阵的左上方的点,由于矩阵的长和宽是固定的,那么这个矩阵实际上也已经固定了。此时这个矩阵的和用公式:
sum=a[i+x-1][j+y-1]-a[i+x-1][j-1]-a[i-1][j+y-1]+a[i-1][j-1];
取最大值就可以了。
...
分类:
其他好文 时间:
2014-10-06 21:26:01
阅读次数:
174
题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每个非叶节点都有恰好n个子节点的树
给定n和d,求深度为d的严格n元树一共有多少种
此题的递推部分并不难 首先我们设深度为i的严格n元树一共有f[i]种 令S[i]为f[i]的前缀和
我们不难发现一棵深度为i以下的严格n元树由两部分组成:一个根节点,n棵子树,其中每棵子树的深度不超过i-1
每棵子树有S[i-1]种...
分类:
其他好文 时间:
2014-10-05 12:42:28
阅读次数:
194
题目地址:Ural 1146
这题是求最大子矩阵和。方法是将二维转化一维。
首先用n*n的方法来确定矩阵的列。需要先进行预处理,只对每行来说,转化成一维的前缀和,这样对列的确定只需要前后两个指针来确定,只需要用前缀和相减即可得到。前后两个指针用n*n的枚举。
确定好了哪几列,那么再确定行的时候就转化成了一维的最大连续子序列的和。再来一次O(n)的枚举就可以。
这样,总复杂就变成了O(n^3...
分类:
其他好文 时间:
2014-10-03 22:40:35
阅读次数:
205
题目大意:经典的物理上的桌边堆书问题,初中物理老师曾经还讲过,不过只记住了结论。。。没关系,简单证明一下就好
首先我们设由上至下第i本书比它下面那本书多伸出去的长度为a[i],前缀和为s[i],那么我们要求的就是s[n]
为了简化问题我们设一本书的长度为1
假设n=1
a[1]=1/2,毫无疑义
然后考虑两本书
两本书的时候,重心明显在距下面那本书左端点的3/4处,故a...
分类:
其他好文 时间:
2014-10-03 17:54:49
阅读次数:
300
题目大意:给定一个序列,找到k个长度在[l,r]之间的序列,使得和最大
暴力O(n^2logn),肯定过不去
看到这题的第一眼我OTZ了一下午。。。后来研究了很久别人的题解才弄明白怎么回事。。。蒟蒻果然不能理解大神的思路啊0.0
首先维护前缀和,那么以第i个元素结尾的和最大的序列自然就是sum[i]-min{sum[j]}(i-r
然后我们维护一个大根堆,每取走一个以i为结尾的元素,加入s...
分类:
其他好文 时间:
2014-09-30 14:55:09
阅读次数:
139
复杂度:O(n*α(n)) 其中α(x),对于x=宇宙中原子数之和,α(x)不大于4 。(对于nocow里的复杂度我也是醉了)概要:并查集就是一个数组和一行话。应用:图的连通、集合操作、生成树的合并等技巧及注意:并查集是个好东西。维护区间+前缀和:对于一些连续的区间,我们要判断这些区间是否合法,带修...
分类:
其他好文 时间:
2014-09-28 14:42:02
阅读次数:
152
贴一个我实现的kmp,在这里我的next数组的定义是,上一个前缀和我当前前缀相同的位置应该在哪里,next[0]=-1 ababac的next数组就是-1,-1,0,1,2-1 #include<iostream>
using?namespace?std;
int?next[...
分类:
其他好文 时间:
2014-09-27 23:41:21
阅读次数:
149