
splay
SC.ldxcaicai
我很菜=_=
展开
-
2018.10.07 bzoj2049: [Sdoi2008]Cave 洞穴勘测(lct)
传送门 这是笔者第一次写lct。 这题操作比较少,就当是练习压行技巧了吧。 然后学习lct时一定记住把原树和辅助树区别开来。 代码: #include<bits/stdc++.h> #define N 10005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit...原创 2018-10-07 11:29:16 · 186 阅读 · 0 评论 -
2018.10.07 洛谷P3690 【模板】Link Cut Tree (lct)
传送门 lct模板题。 学习了新姿势: 判断一条边是否已经存在的方法。 感觉其它都差不多。 代码: #include<bits/stdc++.h> #define N 300005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getc原创 2018-10-07 18:03:20 · 177 阅读 · 0 评论 -
2018.10.07 bzoj3669: [Noi2014]魔法森林(lct)
传送门 lct经典题。 维护动态最小生成树。 具体实现就是把边转化成一个带点权的点,其它的点变成不带点权的点,然后要加入一条边(u,v)(u,v)(u,v)的话,我们求出路径(u,v)(u,v)(u,v)上的最大值与该边的边权进行比较,如果替换更优的话就先断掉那条最大的边,然后连上这条边。 代码: #include<bits/stdc++.h> #define N 100005 #de...原创 2018-10-07 20:22:35 · 214 阅读 · 0 评论 -
2018.10.07 bzoj1180: [CROATIAN2009]OTOCI(lct)
传送门 lct模板题。 只是这一次变成了维护链上的和。 代码: #include<bits/stdc++.h> #define N 30005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(c...原创 2018-10-07 20:47:49 · 167 阅读 · 1 评论 -
2018.10.07 bzoj2631: tree(lct)
传送门 lct经典题。 貌似就是ahoi维护序列放到了lct上。 就直接像线段树那样维护就行了。 不过这个时候区间add时不再是: sum+=(r−l+1)∗vsum+=(r-l+1)*vsum+=(r−l+1)∗v了。 而应该是: sum+=size∗vsum+=size*vsum+=size∗v,因为动态树是没有固定区间的。 然后注意标记的下放以及处处取模什么的应该就能AC了吧。 代码: #i...原创 2018-10-07 23:35:58 · 188 阅读 · 0 评论 -
2018.10.09 bzoj4817: [Sdoi2017]树点涂色(lct)
传送门 其实这道题跟真正的lct关系不是很大。 首先观察到操作1和accessaccessaccess操作很像,启示我们每次把相同颜色的看成一棵splaysplaysplay,那么最后路径uuu->vvv的权值就是路径上splaysplaysplay的数量。 这样的话我们每个点iii维护一个111->iii的权值wiw_iwi。 分类讨论一波之后会发现无论是什么情况路径uuu->...原创 2018-10-09 07:50:59 · 184 阅读 · 0 评论 -
2018.10.09 hdu5333 Undirected Graph(lct+bit)
传送门 lct经典题。 我们把询问按右端点排序。 这样按照右端点值划分询问顺序每次只会加入同一个右端点值那么多的边。 于是只需要处理左端点就行了。 如何处理? 对于不同的边(u,v)(u,v)(u,v),我们规定u&amp;amp;gt;vu&amp;amp;gt;vu&amp;gt;v,然后按照vvv排序。 贪心处理。 假设当前要加入一条边。 加入后不会构成一个环,那么直接用lctlctlct来linklinklin...原创 2018-10-09 19:35:04 · 255 阅读 · 0 评论 -
bzoj3595: [Scoi2014]方伯伯的Oj(splay+map+set)
传送门 题意简述: 给一个有优先级的nnn个人的序列,初始的时候第iii个人排名为iii,现在有mmm个操作,种类如下: 把编号为xxx的改成yyy,输出改前xxx的排名 把编号为xxx放到队首,输出改前xxx的排名 把编号为xxx放到队尾,输出改前xxx的排名 输出排名为xxx的编号。 强制在线,n≤1e8,m≤1e5n\le1e8,m\le1e5n≤1e8,m≤1e5 思路: 本蒟蒻的第...原创 2019-03-28 21:29:01 · 146 阅读 · 0 评论 -
hdu4942 Game on S♂play(线段树)
传送门 考虑到中序遍历是不变的。 所以我们可以直接用线段树维护中序遍历的信息。 当然也可以用splaysplaysplay维护前序遍历的信息。 当然亦可以直接上LCTLCTLCT。 自闭警告 注意多组数据记得要清零 代码: #include<bits/stdc++.h> #define ri register int using namespace std; const int rle...原创 2019-08-05 21:51:39 · 175 阅读 · 0 评论