摘要: Description Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are n... 阅读全文
posted @ 2016-03-20 15:06 ZhMZ 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 在一面墙上贴海报,贴的顺序给出了,求最后能被看到的海报数量。 纯粹的线段树模拟题。 但数据范围给了10^7,超内存了。 实际上这里用了一个小技巧,虽然墙的宽度是很大的,但海报数量只有10000,所以这10^7个数中真正用到的数很少,这样的话就只需要把没用到的数给“删去”,剩下来的数从小到大映射为新的 阅读全文
posted @ 2016-03-19 19:31 ZhMZ 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 在一个二维数组中,每次对一个矩形内所有数据进行取反操作,并实时询问某一位置的值。 一般线段树只支持对一维数据进行更新和查询,但是这题给的是二维数据啊! 这里就需要用到二维线段树了,即树套树,外层线段树的每个结点里面都有一颗线段树。 在实现二维线段树的时候,一开始用加build函数的方式,记录每个结点左右孩子的编号,但超内存了,所以直接用二维数组表示二维线段树,左右孩子编号通过计算得到:设父亲... 阅读全文
posted @ 2016-03-19 19:16 ZhMZ 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 最近做到好几道关于AC自动机与状态压缩dp的结合的题,这里总结一下。 题目一般会给出m个字符串,m不超过10,然后求长度为len并且包含特定给出的字符串集合的字符串个数。 以HDU 4758为例: 把题意抽象为:给出两个字符串,且只包含两种字符 'R'、'D',现在求满足下列条件的字符串个数: 1、字符串必须包含上述两个字符串。 2、字符串长度为(m+n),其中包含n个'D',m个'R'... 阅读全文
posted @ 2016-03-18 18:24 ZhMZ 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 在任意文件夹中放入“data.in”和“data.out”文本文件,它们分别表示输入文件和输出文件。 当然还有将被评测的代码文件“代码.cpp”。 将下面的批处理代码复制进txt文件,改后缀名为.bat,放入文件夹。 @echo off start /wait 获取时间.exe set t1=%errorlevel% 代码 代码.out start /wait... 阅读全文
posted @ 2016-03-18 15:40 ZhMZ 阅读(730) 评论(0) 推荐(0) 编辑
摘要: 题目大意就是要求数组中逆序数的对数,和51nod1019一样,可以用树状数组。 先对所有数进行排序,还要记录每个数原来在数组中的下标,在排好序的数组中,从小到大依次访问,假设访问到第i个数,用树状数组查询1~i-1的数中原始下标小于等于k的个数(k是第i个数的原始下标)。 同时动态更新树状数组。 阅读全文
posted @ 2016-03-16 17:53 ZhMZ 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 这个题目题意描述不清,没有说明只能进入一次。 题目意思很好理解,不再重复。 思路也比较好想,先计算每两个宝藏区的最短路,和每个宝藏区到边界的最短路,然后dp解决。 在计算最短路的时候,用优先队列优化的Dijkstra算法。 在-1的处理上有些小技巧。 但是!但是!!,我之前的思路是dp[i]表示状态 阅读全文
posted @ 2016-03-15 21:21 ZhMZ 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 查询区间第k大可以用划分树,而查询区间最小(最大)值可以用代码更简单的Sparse-Table(ST)算法(Tarjan发明)。 原理很简单,代码也很短: 令d(i,j)表示从i开始的,长度为2^j的一段元素最小值,那么可以用递推方法计算: d(i,j) = min( d(i,j-1) , d(i+2^(j-1) , j-1) ) void RMQ_init(const vector... 阅读全文
posted @ 2016-03-14 15:44 ZhMZ 阅读(670) 评论(0) 推荐(0) 编辑
摘要: 树状数组又叫二叉索引树 参考《训练指南》P194 动态求连续区间和,可以动态更新数据,支持以下两种操作: 1、 对某一元素进行更新操作。 2、 查询某一连续区间的元素和。 对于正整数x,我们定义lowbit(x)为“x的二进制表示中最右边的1所表示的值”,例如lowbit(11001100) =100 (这里的11001100、100都是二进制表示),在程序实现中lowbit(x) = ... 阅读全文
posted @ 2016-03-14 15:24 ZhMZ 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k大值。 先看下图已经建好的划分树是什么样子的,原始数组是[1,5,2,3,6,4,7,3,0,0],并把它作为树的第0层,然后把这些数中较小的数再组成[1,2,3,0,0],顺序还是遵照原数组的顺序,同样将较大的数再组成[5,6,4,7,3]。把这两个数组作为树的第二层,它们的父亲则是第一层的原始数组... 阅读全文
posted @ 2016-03-14 15:20 ZhMZ 阅读(379) 评论(0) 推荐(0) 编辑