平方分割poj2104K-th Number】的更多相关文章

K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 59798   Accepted: 20879 Case Time Limit: 2000MS Description You are working for Macrohard company in data structures department. After failing your previous task about key inse…
干掉这道题的那一刻,我只想说:我终于**的AC了!!! 最终内存1344K,耗时10282ms,比起归并树.划分树以及其他各种黑科技,这个成绩并不算光彩⊙﹏⊙ 但至少,从最初的无数次TLE到最终的AC,这过程见证了一个二分算法的艰辛优化 感谢国家,感谢XXTV,感谢<挑战程序设计竞赛>~( ̄▽ ̄)~* 先贴代码: ; ; ; ; const int maxV=1e9; int bucket[bktCount][bktSize]; int unOrdered[bktSize*bktCount];…
有了上一题的经验(POJ的静态区间第K最值)再解决这道题就轻松多了 空间5256KB,时间3330ms,如果把动态开点的平衡树换成数组模拟的话应该会更快 之所以选择了平方分割而不是树套树,不仅是所谓趁热打铁,更是因为: 平方分割的修改操作,无论编程复杂度还是时间复杂度都远优于树套树. 代码如下:(鄙人不才,不会压代码,所以写了300多行Σ( ° △ °|||) template <class T> struct SbtNode { typedef SbtNode<T> Node;…
题意:任意区间求第k大数 思路: 预处理:利用平方分割(分桶法)把区间切割成B = sqrt(n)大小的一块块,然后每个各自排序. 二分第k大数x,接着就需要求[l,r]区间中x的排名,与k比较,将两边端点非完整桶的点进行扫描,最多B次,其余每个桶进行二分查找排名,可利用upper_bound(STL)即可快速实现. 评价: 二分确实坑爹,不过搞了这一题也算对二分查找理解深入了些. 二分正确做法: 对于[0..n-1)有[0..m]满足性质其余不满足, 则应用[l, r)进行二分查找, 最后l一…
POJ 2104为例 思想: <挑战程序设计竞赛>中介绍的方法. 分桶法:把一排物品或者平面分成桶,每个桶分别维护自己内部的信息,已达到高效计算的目的. 设一共有n个数,每b个分到一个桶里,并对桶内元素进行排序.给定区间,求小于x的数的个数 对于完全包含在区间内的桶,直接二分查找满足条件的个数,每个桶处理需要O(logb)的时间. 剩余的不完全分布在其他桶的数,逐个查找,每个元素处理需要O(1)的时间. 可以看出,应该使桶的个数比桶内元素个数略少一些. 如果b=n−−√,那么这就叫平方分割,查…
Big String 给一个字符串,长度不超过 106,有两种操作: 1. 在第 i 个字符的前面添加一个字符 ch 2. 查询第 k 个位置是什么字符 操作的总数不超过 2000 如果直接模拟的话,移动到后面的数据量太大.我们分块的话,就可以优化,减少移动的量.  很典型的块状数组.块状数组的next指向的是一块,而不是一个.这里用整数代替了指针. 每一个块就是一个对象.这题用面向对象编程. #include <iostream> #include <cstdio> #inclu…
题目链接 Description You are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to write a new data structure that would be able to return quickly k-th order statistics in the…
平方分割一直TLE,最后用归并树处理过了,使用STL会比较慢. #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<map> #include<queue> #include<vector> #include<c…
题目大意:求第k个无平方因子数是多少(无视原题干.1也是全然平方数那岂不是一个数也送不出去了? 无平方因子数(square-free number),即质因数分解之后全部质因数的次数都为1的数 首先二分答案 问题转化为求x以内有多少个无平方因子数 依据容斥原理可知 对于√x以内的全部质数 x以内的无平方因子数=无需是不论什么质数的倍数的数的数量(即x)-是至少一个质数平方倍数的数的数量+是至少两个质数平方倍数的数的数量-是至少三个质数平方倍数的数的数量... 我们回去考虑莫比乌斯函数,我们发现每…
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用的方法有很多,我听过的只有主席树.整体二分法.划分树.分块…… 因为是看<挑战>书介绍的平方分割方法(分块),所以先把分块说了,其他的坑以后再填 分块算法思想是将区间分为若干块,一般分为 n1/2 块然后在每块维护所需信息,可以把复杂度降到 O(根号n) 具体的分析和代码在<挑战程序设计竞赛…