自己YY出来的方法,时间复杂度为n*m,但实际上并没有这么多,codeVS上最慢的一组有300多ms。
对于每一个订单,在它的左端点加上需要的教室数量,在右端点加1的位置减去需要的教室数量。然后统计前缀和,如果有某个点的前缀和大于了当天教室的数量,那么就有的订单就有问题了,然后从订单编号从小到大统计在订单区间的教室数量,保存恰好不能满足的那个订单;对于之后不满足题意的前缀和,统计订单的最大编号不...
分类:
其他好文 时间:
2015-08-18 21:30:25
阅读次数:
194
Jupiter Atacks!/** 题意:B,P,L,N,分别表示进制,mod,数组的个数,操作数 做法:树状数组 欧几里得 每个数加入到数组Tree的数是 B^(L-i) 用树状数组进行维护前缀和,然后求一段区间的数,除以B^(L-j) 因为(前缀和/B^(L-j))...
分类:
其他好文 时间:
2015-08-18 13:38:23
阅读次数:
127
如果一条边可行,那么删掉这条边后,剩下的图是二分图且该边的两端点颜色相同。那么可行的边必然属于所有奇环的交集,且不属于任何偶环。随便取一棵生成树,对于一条非树边,它形成了环:若是偶环,则将环上的边都标记为不能选。若是奇环,则将环上的边经过的奇环数都加一。可以用树链剖分维护前缀和做到$O(m\log ...
分类:
其他好文 时间:
2015-08-17 23:19:11
阅读次数:
134
参考:从头到尾彻底理解KMP
在字符串 str 中 匹配模式串 pattern
1. 计算模式串的 next 数组;
2. 在字符串中匹配模式串;当一个字符匹配时,str[i++], pattern[k++] 继续匹配下一个字符;当当前字符不匹配时,根据 next 数组移动模式字符串,k = next[k] next 数组:描述模式串中最长相同的前缀和后缀的长度。#include <iostr...
分类:
其他好文 时间:
2015-08-17 17:20:42
阅读次数:
116
题目链接:点击进入
这个题目要求所有相同的前缀和后缀的长度。我们可以利用KMP算法中next数组的性质,在next[len]这个点不断的失配下去,这样就可以将所有相同的前后缀的长度求出来。还要注意这个中整个串的长度也可以看成是一个合法的解。代码如下:#include
#include
#include
using namespace std;c...
分类:
编程语言 时间:
2015-08-16 18:22:49
阅读次数:
110
树状数组天生用来动态维护数组前缀和,其特点是每次更新一个元素的值,查询只能查数组的前缀和,但这个题目求的是某一区间的数组和,而且要支持批量更新某一区间内元素的值,怎么办呢?实际上,还是可以把问题转化为求数组的前缀和。 首先,看更新操作update(s, t, d)把区间A[s]...A[t]都增加....
分类:
编程语言 时间:
2015-08-15 21:21:15
阅读次数:
137
题目链接斜率DP的入门题。题意很清楚,就是输出序列a[n],把连续的单词放在同一行输出的费用是连续输出的单词费用和的平方加上常数M一行的费用为cost=(∑C[i])2+Mcost = (\sum{C[i]})^2 + M让我们求这个费用的最小值。设 SiS_i 为 CiC_i 的前缀和。设dp[i]表示输出前i个单词的最小费用,那么有如下的DP方程:dp[i]=min(dp[j]+(Si?Sj)2...
分类:
其他好文 时间:
2015-08-15 20:02:35
阅读次数:
148
刚才看了(连接)写的翻译,把kmp算法的工作过程讲的很不错,kmp算法的核心是next,next为什么要那么赋值?其实就是前缀和后缀的最大匹配值,用这个值在匹配失败的时候可以跳过一个不必要的匹配。移动的位数 = 已匹配的字符数 - 对应部分的匹配值(也就是前缀和后缀的最大相等值)。为什么要这么移动呢...
分类:
其他好文 时间:
2015-08-14 13:05:27
阅读次数:
104
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711
这个一个字符串匹配的模板题;
其实KMP算法很好理解,但是如果初次接触的话,理解他怎么来的next数组可能会比较吃力;我这里就暂且笼统的讲一下吧。
对于我们要查询的字符串,我们先对他进行前缀和后缀的处理,保存在next数组内;比如这串数字
b[]= 1 2 3 4 1 ...
分类:
编程语言 时间:
2015-08-13 20:09:28
阅读次数:
108
问题的提出:是否可以用线性数据结构的方法解决动态统计子树权和的问题呢?有的,树状数组。假设当前数组为a[],元素个数为n。1. 子区间的权和数组为sum,那么数组a[]中 i 到 j这段区间的数组元素和为sum[i,j]=a[k]的累加 【k属于(i->j)】2. 现在定义前缀和数组s[],s[i]...
分类:
编程语言 时间:
2015-08-12 16:41:20
阅读次数:
132