Jessius的博客

blog.jessun.me

BZOJ 1878, HH的项链

给定一个数列,询问某区间内不同数字的个数。Analysis在线算法不会。离线莫队代码能力又不够…… 用树状数组水了过去…… 首先对选用以左端点为关键字排序,然后用树状数组维护。 先将每种数字第一个出现的位置加一,询问来到该点后将其后继加一,答案用树状数组累加前缀和相减即可。 详见代码。

2017-02-11 17:33:56

阅读数:123

评论数:0

BZOJ 1029, 建筑抢修

贪心无力啊…… 首先将建筑按T2从小到大排序,然后用优先队列维护。 如果当前耗时小于目前带修理的建筑的T2,便将答案加一,入队,当前耗时累加上该建筑的T1; 若大于其T2,就比较优先队列的队首元素的T1与该建筑的T1,若队中元素较大即出队,并将待修理建筑入队,更新当前耗时。

2017-02-11 09:28:36

阅读数:154

评论数:0

BZOJ 1798, 维护序列

维护一个数列,要求支持区间加、区间乘以及查询操作。很裸的线段树,难点在于加法和乘法的操作顺序。 标记下传时应先打乘法标记,再打加法标记,同时更新时还要用乘法标记维护加法标记。

2017-02-09 10:53:44

阅读数:147

评论数:0

BZOJ 1014, 火星人

给定一仅有小写字母组成的字符串,要求支持单字符修改、插入和查询不同起始位置的最长公共前缀长度。用Splay维护字符串,二分+Hash查询。 反反复复WA了很多次,就因为Hash的操作顺序不太对……也算是买了个教训。

2017-02-08 21:17:20

阅读数:250

评论数:0

BZOJ 3110, K大数查询

要求维护一个数列,支持在某部分的每个位置填上一个数以及查询某部分第K大的数字。终于学习了一下树套树的姿势……其实和自己想的也差不多……但是不学还是打不出代码来…… 外层是权值线段树,内层是区间线段树。 要注意的细节比较多。二分查询过程中结果可能超过 Maxlongint ,需要用 unsign...

2017-02-07 20:05:40

阅读数:101

评论数:0

BZOJ 3223, 文艺平衡树

编写一个支持对数列进行翻转子串操作的数据结构。Splay裸题。 只需要支持翻转操作即可。 输出数列时一个一个查询就是了……

2017-02-06 20:21:00

阅读数:170

评论数:0

BZOJ 2243, 染色

要求编写一个数据结构,维护一颗无根树各节点的颜色以支持查询两点间的路径上颜色段的数量。 树链剖分+线段树。 线段树各节点保存区间左端点、右端点的颜色,区间内颜色段数量,以及线段树set操作标记。 合并区间时要注意处理两段点颜色相同的情况。

2017-01-20 13:43:55

阅读数:169

评论数:0

BZOJ 1015, 星球大战

编写一个支持删点并查询当前图中连通块个数的数据结构。离线倒序处理+并查集。 于是删点就变成了加点,因此不必考虑正序处理时删边后两点是否仍连通的问题。 先将所有未删除的点加入到图中,再倒序依次加入被删除的点,用并查集来维护图的连通块个数。

2016-10-27 21:36:00

阅读数:90

评论数:0

BZOJ 1031, 字符加密

将一个长度为n的字符串首尾相连,以不同的下标为串的头,有n种读法,将这些读法排序后取各种读法的最后一位组成新串。后缀数组裸题。 将字符串倍长后用后缀数组排序即可。 注意若传入下标为0~n-1的字符串(下标n处为’\0’),传入SA函数中的串长应为n+1,排序后结果亦存在于sa[0…n]中。

2016-10-27 06:47:12

阅读数:103

评论数:0

BZOJ 1208, 宠物收养所

编写一个支持插入、删除元素,查询数列中最接近某值的元素的数据结构。 保证没有重复元素存在出现在树中。Treap和Splay都可做。 Splay苦手选择Treap,然而写得奇丑无比。 查询最接近某值的元素可以将该值插入树中查询前驱与后继,后比较。查询完以后再删掉。

2016-09-27 20:46:38

阅读数:134

评论数:0

BZOJ 2049, 洞穴勘测

要求编写一个数据结构,支持动态连边、删边和查询两点连通性。 保证两点间最多只有一条路径。 LCT模板题。 (其实并查集更好些?) 借这题大致了解了一下LCT,顺便回顾了一下Splay。 LCT里的Splay略有不同于普通的Splay,也是需要特别注意的。参考资料:Yang Zhe《SPOJ...

2016-09-27 06:43:45

阅读数:134

评论数:0

BZOJ 1012, 最大数

编写一个支持查询末尾L个数中最大数和在数列末尾插入的数据结构。 乍一看觉得得写Splay,其实只是利用单调性就可以解决了。 当然这题做法很多,线段树什么的都可搞。 开两个数组,一个作为栈,一个记录栈中元素在数列中的位置。 每新加一个数字,就将栈顶小于它的元素弹出后加入栈(因为若栈顶元素小于新数...

2016-09-11 19:20:09

阅读数:128

评论数:0

BZOJ 1500, 维修数列

编写一个支持插入、删除、修改、翻转、求和以及求和最大子序列的数据结构。Splay无疑。 但是写太丑也是会TLE的,比方说插入的时候应该以建树的形式插入,而不是一个点一个点的形式。 实现起来要注意的细节很多,对练习打Splay挺有好处。 (陆陆续续调试了好多天,总算在崩溃之前AC了……)

2016-09-11 15:51:46

阅读数:89

评论数:0

BZOJ 3224, 普通平衡树

编写一个支持插入、删除元素,查询元素排名,查询相应排名的元素,查询元素前驱与后继的数据结构。 有重复元素存在,且查询前驱后继的元素可能未出现在树中。 Treap和Splay都可做。 Splay随便搞一搞就可以了,然而没打过的我只会口胡…… 于是打了Treap。 重复元素可以选择在保存在同一节点中,...

2016-08-18 19:34:27

阅读数:159

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭