上一页 1 ··· 37 38 39 40 41 42 43 44 45 ··· 65 下一页
摘要: 考虑套路地将1~n依次加入排列。设f[i][j]为已将1~i加入排列,有j对不合法的方案数。加入i+1时可能减少一对不合法的,可能不变,可能增加一对,对于i+1与i的关系再增设0/1/2状态表示i与左边/右边的数是否构成不合法对即可。 阅读全文
posted @ 2018-10-27 02:01 Gloid 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 考虑根号分块。对于<√3e5的模数,每加入一个数就暴力更新最小值;对于>√3e5的模数,由于最多被分成√3e5块,查询时对每一块找最小值,这用一些正常的DS显然可以做到log,但不太跑得过。考虑并查集在序列上的奇技淫巧。加点不太能做,考虑离线改成删点。并查集维护下一个未删除的点即可。 阅读全文
posted @ 2018-10-26 22:17 Gloid 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 设f[i][0/1]为考虑前i位,第i位为0/1时的期望得分(乘以是0/1的概率)。暴力转移显然。前缀和优化即可。 但是这个前缀和精度无法承受,动不动就nan。 考虑增加一位的贡献。若之前后缀1的个数为x,则增加一个1的贡献为(x+1)3-x3=3x2+3x+1。因此记录后缀1的个数期望、后缀1的个 阅读全文
posted @ 2018-10-26 19:43 Gloid 阅读(255) 评论(0) 推荐(0) 编辑
摘要: A:差点开场懵逼。只要有相邻两位不同就可以作为答案。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace 阅读全文
posted @ 2018-10-26 18:23 Gloid 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 由点积的几何意义(即投影)可以发现答案一定在凸壳上,并且投影的变化是一个单峰函数,可以三分。现在需要处理的只有删除操作,线段树分治即可。 阅读全文
posted @ 2018-10-25 20:36 Gloid 阅读(199) 评论(0) 推荐(0) 编辑
摘要: A:设f[i][j][0/1]为前i个数第i位为j且第i位未满足/已满足限制的方案数。大力dp前缀和优化即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #inclu 阅读全文
posted @ 2018-10-25 12:39 Gloid 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 注意到答案一定是原串的子串,于是考虑造出SA,二分答案是第几小的子串。第k小子串很容易在SA上求出。之后计算使他成为最大子串至少要在几个位置切割,对每个字典序比答案大的后缀,找到所有合法切割位置(求lcp即可),就转化成了选最少的点使每个区间都包含至少一个点的经典问题。 阅读全文
posted @ 2018-10-25 00:19 Gloid 阅读(348) 评论(0) 推荐(0) 编辑
摘要: SA写了就忘,SAM根本学不会,没救。 SA模板: 阅读全文
posted @ 2018-10-24 20:38 Gloid 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]为前i个数中所选择的最后一个数在第j位上为1时的最长序列长度,转移显然。 阅读全文
posted @ 2018-10-24 01:35 Gloid 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 感觉非常不可做,于是考虑有什么奇怪的性质。 先考虑怎么求子集和mex。将数从小到大排序,假设已经凑出了0~n的所有数,如果下一个数>n+1显然mex就是n+1了,否则若其为x则可以凑出1~n+x所有数。 对于区间查询,建棵主席树即可,每次查询权值线段树上lastn+2~n+1的区间,用区间和更新n, 阅读全文
posted @ 2018-10-23 22:28 Gloid 阅读(178) 评论(0) 推荐(0) 编辑
上一页 1 ··· 37 38 39 40 41 42 43 44 45 ··· 65 下一页