每一棵线段树是维护每一个序列前缀的值在任意区间的个数,如果还是按照静态的来做的话,那么每一次修改都要遍历O(n)棵树,时间就是O(2*M*nlogn)->TLE考虑到前缀和,我们通过树状数组来优化,即树状数组套主席树,每个节点都对应一棵主席树,那么修改操作就只要修改logn棵树,o(nlognlog
分类:
其他好文 时间:
2016-03-02 19:56:05
阅读次数:
181
题目链接:http://poj.org/problem?id=2104 给n个数和m个查询,查询[i, j]内第k小的数是多少。(主席树、划分树那种高大上的姿势叒不会啊QAQ 可以在维护这n个数的同时维护刚刚输入的时候他们的下标,之后预处理排序一次,查询的时候假如初始下标在[i,j]内,那么k自减1
分类:
其他好文 时间:
2016-02-29 12:19:25
阅读次数:
165
达神题解传送门:http://blog.csdn.net/dad3zz/article/details/50638360 说一下我对这个模板的理解: 看到这个方法很容易不知所措,因为动态K值需要套树状数组,而我一开始根本不知道该怎么套,, 学习吧,,, 然后我自己脑补如果不套会如何?后来想到是查询O
分类:
编程语言 时间:
2016-02-27 20:36:40
阅读次数:
239
先把所有词扔进tire,然后dfs序弄出区间,然后就是区间最大值了 主席树各种写挂QAQ 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=
分类:
其他好文 时间:
2016-02-25 19:40:24
阅读次数:
219
首先,对于每个询问,我们二分答案 然后对于序列中大于等于中位数的数,我们把它们置为1,小于中位数的数,置为-1 那么如果一个区间和大于等于0,那么就资磁,否则就不滋磁 这个区间和呢,我们可以用主席树维护前缀和 [c,d]上的最大前缀和减去[a-1,b-1]上的最小前缀和,就是所有可用区间的最大区间和
分类:
其他好文 时间:
2016-02-24 22:29:09
阅读次数:
294
达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过。今天新校网不好,没有评测,但我立下flag这个代码一定能A。我的同学在自习课上考语文,然而机房党都跑到机房来避难了\(
分类:
其他好文 时间:
2016-02-23 20:36:01
阅读次数:
208
首先求出区间前$k$大数中奇数的个数和偶数的个数。 如果都是偶数,那么答案就是前$k$大数的和。 否则,要么去掉最小的偶数,加上最大的奇数,要么去掉最小的奇数,加上最大的偶数。 主席树维护即可。 时间复杂度$O((n+m)\log n)$。 #include<cstdio> #include<alg
分类:
其他好文 时间:
2016-02-20 00:30:22
阅读次数:
189
其实是求树上的路径间的数据第K大的题目。果断主席树 + LCA。初始流量是这条路径上的最小值。若a<=b,显然直接为s->t建立pipe可以使流量最优;否则,对【0, 10**4】二分得到boundry,使得boundry * n_edge - sum_edge <= k/b, 或者建立s->t,然
分类:
其他好文 时间:
2016-02-15 16:25:54
阅读次数:
215
划分树模板题目,主席树也可解。划分树。 1 /* 4251 */ 2 #include <iostream> 3 #include <sstream> 4 #include <string> 5 #include <map> 6 #include <queue> 7 #include <set> 8
分类:
其他好文 时间:
2016-02-15 00:53:59
阅读次数:
344
思路1:树状数组+离线处理,对所有的w离散化处理,边dfs边使用树状数组更新左右w的情况。思路2:主席树,边bfs边建树。结点信息存储cnt,然后在线查询。树状数组。 1 /* 4605 */ 2 #include <iostream> 3 #include <sstream> 4 #include
分类:
其他好文 时间:
2016-02-15 00:49:43
阅读次数:
228