上一页 1 ··· 17 18 19 20 21
摘要: 后缀数组sa(x)表示排序后第x位在排序前的位置。 这个东西的求法有两种,一种是倍增,时间复杂度o(n log n)或o(n log2n),另一种是用不知道什么方法做到的o(n)。 至于第二种方法是什么,并不对劲的人并不知道,所以只说倍增。 考虑正常地比较两个字符串,都是从头比较到尾: 那么,如果把 阅读全文
posted @ 2018-01-19 08:46 echo6342 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 听上去像是破坏植物的暴力行为(并不)。 可以快速查询某个字符串在某个字符串集中出现了几次,而且听上去比字符串哈希靠谱。 把整个字符串集建成树,边权是字符,对于字符串结尾的节点进行特殊标记。 这样一方面合并了前缀,节省空间;另一方面查询很方便,直接按边走就行。 #include<iostream> # 阅读全文
posted @ 2018-01-08 21:18 echo6342 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 俗话说得好:心中有党,常数极小。 但有时只凭思想觉悟是无法减小常数的,而有些思想觉悟低的题非要卡常。 这时就可以采用读入/输出优化了。 阅读全文
posted @ 2018-01-08 21:10 echo6342 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 这像是能解决所有问题的样子(并不)。AC自动机之所以叫AC自动机是因为它能解决所有AC自动机的题。 其实只能解决的是很多模式串匹配一个母串的问题。 把kmp中的next数组得到下一次跳转的位置看成特殊的边,把字符串看成链,就会得到一个特殊的图。 一个点u的next连向点v对应的字符串是u最长的后缀, 阅读全文
posted @ 2018-01-08 21:04 echo6342 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 这道题在好多测评网站都可以提交。 这次用平衡树维护的不是每个数的值,而是顺序。 至于区间操作,每次把左边界左边的那个点旋转到根,把右边界右边的那个点旋转到根的右儿子。 然后你就会惊讶(并不)地发现:这个区间都被转到蓝色区域去了!(毕竟是l-1<rank<r+1的部分) 这样就可以在这个区间的根节点, 阅读全文
posted @ 2018-01-08 20:46 echo6342 阅读(175) 评论(0) 推荐(0) 编辑
摘要: splay和不加任何旋转一定会被卡的二叉搜索树的唯一区别就是每次操作把当前节点旋转到根。 旋转有各种zig、zag的组合方式,感觉很麻烦,并不对劲的人并不想讲。 其实可以找出一些共性将它们合并。设ls(a)=[点a是其父亲的左儿子],son[a][0]=a的左儿子,son[a][1]=a的右儿子,f 阅读全文
posted @ 2018-01-03 21:30 echo6342 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题意就是给一张无向有边权的图、起点、终点,求起点到终点经过n条边的最短路。n<=10^6,点的编号<=10^3,边数<=10^2。 这个边数让人不由自主地想到了floyd,然后发现floyd每次相当于加入了一个点(注意,这里的“一次”也是O(点数^3)的,但是在这一次floyd的过程中不会更新结果。 阅读全文
posted @ 2017-12-14 19:36 echo6342 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 在正式开始之前,先讲一下看上去没什么意义的矩阵乘法。 对于大小为n*m大小的矩阵A和大小为m*k的矩阵B相乘,答案是一个n*k的矩阵C,满足: c[i][j]=sum{a[i][l]*b[l][j] | 1<=i<=n,1<=l<=m,1<=j<=k}; 这个东西有什么用呢? *********** 阅读全文
posted @ 2017-12-14 18:50 echo6342 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 因为A掉了d1t1,十分开心,把d1t3的代码调出来了。 一般情况下,noip每一天总有一道dp题,然而d1前两道题都不是,再看看第三题的数据范围,就能大概猜出是dp了。 这道题和最短路计数看上去很像。回想一下最短路计数的解法,大概是按照bfs序进行dp,dp[u]表示到节点u的条数。对于这道题而言 阅读全文
posted @ 2017-12-07 14:12 echo6342 阅读(258) 评论(0) 推荐(0) 编辑
上一页 1 ··· 17 18 19 20 21