摘要: 一共最多才100000个数,并且数值范围0~100000。树状数组 C[i] 记录数值为 i 的数有多少个。删除时如果Query( a ) - Query( a - 1 ) == 0 则该数不存在。求大于a的第K大数只需要对大于a的数二分查找一下,Query( MAXN ) - Query(a)为大于 a 的数的总个数,如果小于K 则不存在。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int MAXN = 100010; 9 10 int Q;11 int C[MAX... 阅读全文
posted @ 2013-08-03 20:37 冰鸮 阅读(149) 评论(0) 推荐(0)
摘要: 原文地址:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html作者:吴hz星期五的时候,在网上看别人的总结看了很久也没有什么收获,不过星期六看了clj原汁原味的论文,终于明白了(网上的总结只写了大致做法,比较难理解).后缀自动机实质上是字母树,记录的字符串是某个字符串s的所有后缀.这里以字符串ACADD为例:这样很浪费空间和时间(实际上都是O(n^2)).但是,注意:这棵字母树的结点虽然多,但大部分结点都只有一个儿子,而且有很多段是一样的.那么,利用公共部分,就可以对空间进行压缩,具体地说,就是把自己连到儿子的边删掉(并把该儿子及其后代删掉) 阅读全文
posted @ 2013-08-03 19:07 冰鸮 阅读(356) 评论(0) 推荐(0)
摘要: 模板来源:http://blog.csdn.net/zkfzkfzkfzkfzkfzkfzk/article/details/9669747解法参考:http://blog.csdn.net/dyx404514/article/details/9631787刚学后缀自动机,还是有很多性质不是很了解……目前也就能做个模板题orz 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 #define N 2010 9 #define MAXQ 10010 10 11 struct S... 阅读全文
posted @ 2013-08-03 18:58 冰鸮 阅读(376) 评论(0) 推荐(0)
摘要: 将起始点、终点和钥匙统一编号,预处理:1.起始点到所有钥匙+终点的最短路2.所有钥匙之间两两的最短路3.所有钥匙到终点的最短路将起始点和所有钥匙四方向出发设为起点BFS一遍,求出它到任意点任意方向的最短路dp[i][j][k]。(即到点(i,j)且方向为k的最短路),BFS时需要注意:1.UDLR有可能组成死循环2.转向符在墙边并且指向了墙时,无法重新选择方向。例如这个: S...L#E3.只有豆腐块滑动碰到墙停止了之后,才能把这个点的坐标加入队列。在滑动过程中经过的点都不需要加入队列。4.钥匙在墙边的情况。在一次滑动过程中,豆腐块经过K时只有一个方向。但是如果K在墙边,并且滑动方向可以使豆腐 阅读全文
posted @ 2013-08-03 10:55 冰鸮 阅读(409) 评论(0) 推荐(0)