有了上一题的经验(POJ的静态区间第K最值)再解决这道题就轻松多了 空间5256KB,时间3330ms,如果把动态开点的平衡树换成数组模拟的话应该会更快 之所以选择了平方分割而不是树套树,不仅是所谓趁热打铁,更是因为: 平方分割的修改操作,无论编程复杂度还是时间复杂度都远优于树套树. 代码如下:(鄙人不才,不会压代码,所以写了300多行Σ( ° △ °|||) template <class T> struct SbtNode { typedef SbtNode<T> Node;…
Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find the k-th smallest number of the given N numbers. They…
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 题意: 求动态区间第K大. 分析: 把修改操作看成删除与增加,对所有操作进行整体二分. 代码: #include<cstdio> #include<iostream> #include<cstring> using namespace std; #define pr(x) cout << #x << &quo…
CRB and Queries Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 231    Accepted Submission(s): 41 Problem Description There are N boys in CodeLand.Boy i has his coding skill Ai.CRB wants to k…
题目大意 给定一个数列,编号从 1 到 n,现在有 m 个操作,操作分两类: 1. 修改数列中某个位置的数的值为 val 2. 询问 [L, R] 这个区间中第 k 大的是多少 n<=50,000   m<=10,000 做法分析 本以为某一天我会用 splay 或者 树套树 去搞的,结果被用块状链表搞了 其实这题和链表没什么关系,利用了块状链表分块操作的思想 首先,看看数据规模:n<=50,000,那么,我们每一块的大小可以设置为 sqrt(n) 大概 230 的样子 用一个数组 A …
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间维护一棵树,然后将小于key的数量累计起来,因为这种做法不能直接找第k大,而要二分然后来判断排名是否==k-1. ps:这里有个小地方我不能理解,是看绿云大神的代码的.就是二分那里,为什么最后还要return left,不是在二分里面当s==k-1的时候就return了吗.难道说还有其它原因??所以…
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. bzoj提交是wa!!T_T,将数组改大就acT_T 吐槽完毕. 这题之前做过,用树套树做的,但是时间感人(http://www.cnblogs.com/iwtwiioi/p/3870597.html) 鉴于我是蒟蒻,所以我根本不会做啊!! 学习,,, 恩... 这题用树状数组来维护区间,写过树状数…
比树状数组套主席树不知道高到哪里去了,solve(l,r,L,R)就是对于L,R的操作区间的答案都在l,r区间里,然后递归下去 复杂度O(nlognlogn),每个操作会执行logn次就是o(nlogn),带上bit就是loglogn //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4) //#pragma GCC optimize("unroll-loops") //#pragma…
ZOJ - 2112 \[ \ \] (那些说这道题是树状数组套主席树的人一定对主席树有误解!) 这里我们用树状数组套线段树来解决来写 首先 , 我们需要有n棵线段树(不是\(n^2\)空间,别慌) 我们用这些线段树存储值域$ [l,r] $内数的个数 基于主席树的思想,我们的线段树是要相减的,记录的是前缀 由于要更新前缀,我们必须快速更新,所以采用树状数组来写 事实上,这里线段树的本质并非主席树,而是动态开点的线段树 (这两者是有显著差异的) 这是主席数的单点修改 struct Functio…
整体二分. 主要需要注意的一点是,对于每个删除操作,若删除操作被算入贡献,则最开始的插入操作也一定会被算入,所以不必担心删除删错. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define LL long long #define FILE "dealing" #define up(i,j,n) for(int i=j;i<=n;i++…