Ruins He's house

Enjoy the daily life

今晚做这题,因为使用 int 型贡献了不少的 WA,最后改成 long long 就过了。这题一看就可以明显注意到使用线段树来写了,原来不是很经常写更新区间的问题,在此对更新区间查找区间的题目进行一下总结。

更新区间的函数,注意记录一个增量 addadd 来表示这个区间从它的父亲结点继承下来的增量,当我们找到一个区间时候,就把增量全部转化为 sumsum,也就是这个区间的总和,然后对 addadd 进行继承操作,最后清空 addadd,之后就是三种情况的二分了。

对于求和函数,类似的,我们要先处理继承问题,然后二分查找结果,最后返回。

更新区间查找区间的题目一般比较烦,需要记录父亲结点继承的增量,所以我们把 seg[k]seg[k] 对应的区间的边界也加入到结点信息中,这样可以大大减少函数的参数。

阅读全文 »

在很多情况下,我们可以用一个整数或者多个整数把多变的状态压缩,这样有利于空间上的优化,虽然在代码量上并不能得到多少的好处,但是遇到数据量大的时候还是可以有一定的效果的。

以 POJ1753 为例,这题是推荐题中的简单题了,一般的搜索完全可以过,甚至不用搜索。。。

阅读全文 »

下午看到了这题,第一反应就是 MST,既然是 MST,可以用 Kruskal 快速地解决问题,记住在输入所有边之后,删除村庄时把边删除,我的方法是开一个数组 extextext[i]ext[i] 表示 ii 是否存在,在对边结构体排序的时候,把不存在的边通通放到后面去,这样,当 Kruskal 过程中,找到一个不存在的边时,就退出,这样会节省比较多的时间。

阅读全文 »
0%