摘要: 这是个很奇怪的东西,不过有n*sqrt(n)的时间复杂度保证, 所以直接乱搞 一个区间[l,r]内抽到同种颜色袜子的概率(设num[i]表示该区间中颜色为i的袜子数量) sum( num[i])*(num[i]-1) ) / (r-l+1)*(r-l), (1<=i<=n) 分母很容易求出来,我们单 阅读全文
posted @ 2016-02-22 22:16 using_namespace 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 三个属性, 以第一个属性为关键字从小到大排序, 那么考虑一朵花的等级, 只需考虑排在其前面的花的其他属性(特殊情况是有相同的花,根据题意,对一段相同的花,以排在最后的一朵花的答案为准),那么后面的操作就不用考虑第一个属性了 第二三维可以用树状数组加Treap解决, 以每朵花第二属性数值作为位置(因为 阅读全文
posted @ 2016-02-21 18:33 using_namespace 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 点分治见BZOJ2152 此题只是同时需要把点到根的距离存到数组里, 可以用sort排序然后再统计(arr数组排序后只要arr[l]+arr[r]小于k,则arr[l]与arr中下标[l+1, r]任意一个的和都满足要求,直接统计) #include<algorithm> #include<iost 阅读全文
posted @ 2016-02-19 20:07 using_namespace 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 点分治基本思路: ①对每个点, 计算经过它的满足题目要求的链的条数, 所有点的答案加起来刚好不重不漏地统计了整棵树中满足条件的点数 ②计算方法:先算出一颗树上经过了根(根找重心,树比较平衡)的满足条件的链的数量(可以分治), 然后打上标记(每次递归下去时如果遇到标记就停止, 相当于将树从这个位置断开 阅读全文
posted @ 2016-02-19 20:02 using_namespace 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 首先做了这题才知道自己根本不会Splay, 虽然写过几个题目, 但是区间翻转标记下放没有仔细想过, 想想以前的区间翻转题目, 恰好没有考虑到我忽略的部分, 那就是标记下放的问题, 例如BZOJ3223每次操作会先找到区间两端, 注意到在找的过程中就会下放标记, 所以Splay(){}里面不需要下放标 阅读全文
posted @ 2016-01-28 10:08 using_namespace 阅读(884) 评论(0) 推荐(0) 编辑
摘要: 线段树+Treap, 基本思路同ZOJ2112(区间kth): http://www.cnblogs.com/usingnamespace/p/5152220.html 维护x在区间[s, t]的前驱只要利用线段树将该区间分为线段树上一些节点代表的区间, 在每个区间中求x的前驱取其中的 最大值 同理 阅读全文
posted @ 2016-01-26 15:48 using_namespace 阅读(184) 评论(0) 推荐(0) 编辑
摘要: ---恢复内容开始--- 题意:给出一个序列和操作次数, 每次操作修改一个位置的数 或者 询问一个区间第k小的数 分析:单点修改可以考虑线段树, 区间排名可以用平衡树 所以线段树+Treap 用一颗线段树将序列划分 每颗Treap中插入的是对应区间的数 在每个数加入时, 顺便将该数插入线段树中包含该 阅读全文
posted @ 2016-01-22 19:51 using_namespace 阅读(373) 评论(0) 推荐(0) 编辑