给一个长度为N的字符串S,字符集是[a,z],每个字符都有一个权值Vi,求有多少个子串subS满足以下条件:
1. |subS|>=2
2. subS[0]=subS[|subS|?1]
3. ∑|subS|?2i=1Vi=0...
分类:
其他好文 时间:
2015-03-01 21:05:27
阅读次数:
207
描述
给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和。
http://codevs.cn/problem/3147/ 分析
直接 n3 的矩阵乘法肯定超时, 要采用前缀和优化
row[s1] … row[t1]
col[s2] … col[t2]
(s1, s2) – (t1, t2)
row[x] * col[y]...
分类:
其他好文 时间:
2015-02-21 12:02:08
阅读次数:
164
因为所有点权都是正的,所以对每个结点u来说,每条从根到它的路径上只有最多一个结点v符合d(u,v)=S。所以我们可以边dfs边把每个结点的前缀和pre[u]存到一个数据结构里面,同时查询pre[u]-S是否存在。数据结构用set、hashtable(随便卡)(需要支持删除,由于总是删掉最后一个,因此...
分类:
其他好文 时间:
2015-02-18 16:25:27
阅读次数:
132
首先断环成链,变成两倍长度。然后二(fen)分(shu)答(gui)案(hua),查看答案为ans的长度在[L, R]之间的链存不存在。我们可以维护前缀和,用单调队列O(n)判断是否和大于0又学习了个黑科技。。。::x表示全局变量x。。。 1 /***************************...
分类:
其他好文 时间:
2015-02-15 23:04:38
阅读次数:
210
http://acm.split.hdu.edu.cn/showproblem.php?pid=5172官方题解
一个区间是排列只需要区间和为len(len+1)2(len为区间长度),且互不相同,对于第一个问题我们用前缀和解决,对于第二个问题,预处理每个数的上次出现位置,记它为pre,互不相同即区间中pre的最大值小于左端点,使用线段树或Sparse Table即可在O(n)/O(nlogn)的...
分类:
其他好文 时间:
2015-02-15 18:12:15
阅读次数:
161
我的第一道主席树(静态)。先记下自己对主席树的理解:主席树的作用是用于查询区间第k大的元素(初始化nlog(n),查询log(n))主席树=可持续线段树+前缀和思想主席树实际上是n棵线段树(由于是可持续化线段树,所以实际上是n个长度为log(n)的链),第i棵线段树保存的是a[1]~a[i]这i个数...
分类:
其他好文 时间:
2015-02-11 23:15:20
阅读次数:
324
题目地址:HDU 5172
比赛的时候用一个维护了区间和,区间积,区间最值的线段树水过去了。。赛后数据改回10^6后,就TLE了。。
正解是区间和用前缀和维护就可以。然后维护一个该位上的数上一个出现额位置,那么每次查询,如果每个数的上一个出现的位置都小于l的话,那么就说明没有重复的,如果区间和符合全排列的和,那么就说明肯定是一个全排列了。
代码如下:
#include
#include ...
分类:
其他好文 时间:
2015-02-11 16:37:51
阅读次数:
150
题目链接:HDU 5172 GTY's gay friends
题意:给出一串序列,询问[l,r]区间里是否存在1~l-r+1的一个排列。
思路:1~l-r+1的一个排列 等价于 [l,r]中元素互不相同且[l,r]区间和等于(1+len)*len/2(len=l-r+1)。
区间和可以用前缀和来处理。
元素互不相同,记录位置i上a[i]上次出现的位置记做pre[i],再用线段树来维护区间...
分类:
其他好文 时间:
2015-02-10 16:50:48
阅读次数:
186
题意:给出一个01串,选一个长度至少为L的连续子串,使得串中数字的平均值最大。分析:能把这道题想到用数形结合,用斜率表示平均值,我觉得这个想法太“天马行空”了首先预处理子串的前缀和sum,如果在坐标系中描出(i, sum[i])这些点的话。所求的平均值就是两点间的斜率了,具体来说,在连续子串[a, ...
分类:
其他好文 时间:
2015-02-08 11:35:15
阅读次数:
315
题目链接:点击打开链接
题意:
给定n个点的树。
下面m个操作,每次给一条路径上的边都染一次。
最后问:每个边被染色的次数。
和去年网赛的一道差不多,就是类似前缀和的做法,
我们在某个点+1然后从叶子节点到根节点求一个前缀和,这样某个点加1就相当于某个点到根的路径都加了1.
所以当我们给[u,v]染色时就 sum[u]++; sum[v]++; sum[LCA(u,v)]-=2;...
分类:
其他好文 时间:
2015-02-07 21:41:38
阅读次数:
254