首页 > 其他分享 >永无乡

永无乡

时间:2024-08-30 10:39:35浏览次数:7  
标签:遍历 int 永无 合并 Splay merge root2

考虑在线维护,显然用并查集。对每一个集合都维护一个Splay(或其他平衡树),然后直接查询就好了;所以现在的任务就是合并两个Splay。如果满足一个Splay的最大值小于另一个Splay的最小值,那么是可以快速合并的;但是这里显然不满足,所以只能用启发式合并,对于较小的Splay,遍历其每个节点,然后将每个节点插入到另一个Splay里面即可

细节:

1.可以用vector存储每个Splay,更简单的方法是用root[N]代表每个Splay

2.合并的时候先遍历再合并,而且在遍历和合并之间,要将当前点情况,如下

void merge(int p,int &root2)
{
	if(!p) return;
	merge(a[p].l,root2),merge(a[p].r,root2);//先遍历
	a[p].l=a[p].r=0;
	a[p].cnt=a[p].Size=1;//清空
	if(a[p].val>=1&&a[p].val<=n) 
	splay(root2,insert(root2,0,p));//再合并
}

标签:遍历,int,永无,合并,Splay,merge,root2
From: https://www.cnblogs.com/dingxingdi/p/18388136

相关文章

  • P3224[HNOI2012]永无乡
    P3224[HNOI2012]永无乡(超详细!)居然没有人写平板电视库的题解(pbdsyyds)不了解pbds库的可以去看oiwiki或者上网学习。题目大意给定一个无向图,询问\(x\)所在连通块排名第\(y\)的点,且带加边修改。刚开始每个点属于一个连通块,\(m\)条边可以看做\(m\)个加边的操作。思......
  • [lnsyoj300/luoguP3224/HNOI2012]永无乡
    题意给定\(n\)个集合,每个集合最开始只包含数\(a_i\),然后进行\(m\)次合并操作。具体地,每次操作将数\(a_i\)所在的集合与数\(a_j\)所在的集合合并。接下来,进行\(q\)次操作,每次操作可能为合并操作与查询操作,合并操作与上述相同,查询操作为查询数\(a_x\)所在的集合中第......
  • 佛祖保佑 永无bug 永不宕机
    _ooOoo_o8888888o88"."88(|-_-|)O\=/O____/`---'\____.'\\||//`./\\|||:|||//\......
  • 大型网站技术架构:核心原理与案例分析—第六章:永无止境:网站的伸缩性架构
    1,网站架构的伸缩性设计一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩;一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。1)不同功能进行物理分离实现伸缩每......
  • 佛祖保佑,永无bug
    fozu(){return["_ooOoo_","o8888888o","88\".\"88","(|-_-|)","O\\=/O",&......
  • Luogu P3224 [HNOI2012]永无乡
    [HNOI2012]永无乡题目描述永无乡包含\(n\)座岛,编号从\(1\)到\(n\),每座岛都有自己的独一无二的重要度,按照重要度可以将这\(n\)座岛排名,名次用\(1\)到\(n\)来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另一个岛。如果从岛\(a\)出发经过若干座(含\(0\)......
  • P3224 [HNOI2012]永无乡 题解
    典型Splay练习题。开始建\(n\)个Splay,每一次建边用并查集判断是否在一个子图,不在就合并,即把一个Splay的所有点全插入到另一个Splay中,需要合并的点可以用vector存储。但......
  • 永无乡
    永无乡原题链接(acwing)可持久化线段树合并与查询(权值的划分)线段树的合并与查询加上并查集的访问根结点创建线段树的时候,每一个点对应为一条链式结构,且创建好线段树后,它......
  • 洛谷P3224 [HNOI2012]永无乡 题解 splay tree 启发式合并
    题目链接:https://www.luogu.com.cn/problem/P3224主要知识点是:树上启发式合并,即每次合并将小的树里面的每个点合并大大的树里面,时间复杂度\(O(n\log^2n)\)。同时需要......
  • 【XSY4375】永无乡(二元GF)
    以下“二叉树”均默认为有根无标号但区分左右儿子的二叉树。设\(h_{n,k}\)表示\(n,k\)的答案,有:\[h_{n,k}=\sum_{i=0}^{n-1}\left(h_{i,k}\cdotf_{n-i-1}+f_{i}\cd......