摘要:
splay模板题。 用splay维护序列,令splay的中序遍历为这个序列,则在处理[l,r]时,先将l-1旋转到根,再将r+1旋转到根的右子树,那么根的右子树的左子树就是[l,r]了。 代码: #include<iostream> #include<cstdio> #include<cstring 阅读全文
摘要:
莫队模板题。转移时O(1)维护一下总方案数与相同颜色方案数就可以了。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using nam 阅读全文
摘要:
题目大意: 给出一个序列和m个询问,每个询问求[l,r]中权值∈[a,b]的权值的种类数。 由于询问是离线的,考虑莫队。显然可以用修改和查询为O(log2n)的树状数组维护权值种类数,但这种做法的总时间复杂度是O(n*sqrt(n)*log2m),可能会TLE。 注意到总共有O(m)个查询、O(n* 阅读全文
摘要:
树状数组打错调了一个小时。。。 对于点(x,y),其它点只会在他的左下、右下、左上、右上四个方向上。我们只需求在左下方向上就可以了,因为其他方向可以通过改变相对位置求得。 考虑cdq分治。先按x坐标排序,然后将区间[l,r]分为[l,mid],[mid+1,r],因为只求左下方向上的点,所以可以去掉 阅读全文
摘要:
假设我们可以求出当a[1]..a[i]是局部最小值而其它点不加限制时的方案数,那么显然可以通过容斥求出答案。 那么怎么求当一些点是局部最小值时的方案数呢? 考虑DP。将数字从小到大放。令f[i][j]表示已经放了i个数,局部最小值的点的状态为j时的方案数,可得到方程: f[i][j]=Σf[i-1] 阅读全文
摘要:
bzoj2006: 定义一个四元组{x,l,r,w},表示左端点在x,右端点在[l,r]的超级和弦的最大美妙度在将w作为右端点时取到,w可以用前缀和+线段树/ST表求出。 对于每个i,我们将{i,i+L-1,i+R-1,w}放入一个大根堆中,每次取出美妙度最大的一个加到答案中,并将{i,l,w-1, 阅读全文
摘要:
建模: 将用户群和中转站看成点。对于用户群i,将其向a[i],b[i]连一条边,将c[i]作为它的权值。对于中转站i,将-p[i]作为它的权值。 然后问题就转化为求图的最大权闭合子图。 图的闭合子图是指一个点集V,满足对于任意i∈V,i的所有出边指向的点∈V。 根据定义可以知道,图的闭合子图是允许超 阅读全文
摘要:
题目大意: 给定一棵有根树,每次询问所有颜色为a的节点的子树中颜色为b的节点个数之和。 思路: 考虑将询问按b的出现次数分类。 若b<=sqrt(n),我们可以在每个b节点用一个vector记录它涉及到的询问。 dfs,用桶记录从根节点到这个节点每种颜色的出现次数,就可以更新答案了。 由于总点数为O 阅读全文
摘要:
题目大意: 给出一棵树,每条边有权值,求经过少于l条边,权值和少于w的路径总数。 点分治。每次求出所有点到重心的距离,按w排序,然后维护一个树状数组,记录经过的边<=i的点个数。由于可能两个点都在一棵子树中,再容斥一下就好了。 代码: 1 #include<iostream> 2 #include< 阅读全文
摘要:
思路与1492相同。 注意点: 1、叉乘时用long long会爆,要用double 2、凸包中可能什么都没有,这时不能更新。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 阅读全文