Data Structure
Wearry
这个作者很懒,什么都没留下…
展开
-
noi2015 软件包管理器 树链剖分 + 线段树维护
题目意思: 给你n个节点,n-1条边构造一棵树,接着有两种类型的询问和操作: 1.求某个点到根的链上的所有值为0的点的总个数,然后将所有为0的节点改为为1的节点。 2.求某个点的子树中的所有值为1的点的总个数,然后将所有值为1的节点改为为0的节点。分析: 很简单的树剖思想:将所有的点按照dfs序编号后,利用一颗线段树来维护树剖则可以加速这个过程,使得整体时间复杂度降为原创 2016-08-07 21:25:38 · 359 阅读 · 2 评论 -
POJ 3468 A simple problem with integers Splay 区间维护模板题
题意: 给你n个数字,m组修改或者询问操作,修改为区间修改,询问也是区间和的询问。 分析: 很简单的一道线段树Lazy练习题,用来练习Splay的区间维护也是一个不错的选择,使用标记来加快速度,最后注意答案要开long long即可Ac 代码:#include<iostream>#include<cstring>#include<cstdio>using namespace std;原创 2016-08-13 11:03:47 · 442 阅读 · 0 评论 -
函数式线段树
#include<algorithm>#include<iostream>#include<cstdio>using namespace std;const int maxn = 100000 + 10;struct node { int l, r, w; node(int l=0, int r=0, int w=0): l(l), r(r), w(w) {}}T[maxn原创 2016-08-11 19:34:31 · 654 阅读 · 0 评论 -
Splay 区间信息的维护与查询 静态模板
Splay树除了被用作平衡二叉树之外,还有许多更高级但我们不常用的功能,比如:用Splay的旋转操作来维护区间信息,这里的旋转优先级我们可以用一个Rank来表示,则Rank[i]就代表了第i个点的优先级(对应的就是原来的序列中的位置标号),通过依据对位置标号的旋转操作,我们可以更加方便直观的维护一个区间的总和、最值等信息,并且理论复杂度与线段树相当。#include<iostream>#inclu原创 2016-08-10 08:44:53 · 376 阅读 · 0 评论 -
Spoj375 Query on a tree 裸·树链剖分
题意: 边修改,树上最值查询 分析: 又裸又水,略 代码:#include<bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 100000 + 10;void read(int &n) { int f = 1; n = 0; char ch = g原创 2016-08-08 20:36:32 · 297 阅读 · 0 评论 -
静态LCT标准模板
#include<bits/st6dc++.h>using namespace std;const int maxn = 100000 + 10;struct Link_Cut_Tree { int c[maxn][2], fa[maxn]; void rotate(int u) { int v = fa[u], t = c[v][1] == u;原创 2016-07-30 21:19:43 · 460 阅读 · 0 评论 -
Hnoi2010 bounce Link-Cut Tree
#include<bits/stdc++.h>using namespace std;const int maxn = 200000 + 10;int n, m;void read(int &x) { char ch = getchar(); int f = 1; x = 0; while(ch < '0' || ch > '9') { if(ch == '-') f = -1原创 2016-07-31 15:31:37 · 380 阅读 · 0 评论 -
Size Balanced Tree Sbt模板
#include<bits/stdc++.h>using namespace std;const int maxn = 200000 + 10;struct SBT { int cnt; int c[maxn][2], key[maxn], size[maxn]; void init() { cnt = 0; memset(c, 0, si原创 2016-07-31 17:20:10 · 346 阅读 · 0 评论 -
Sbt 带查找、查询、删除操作
#include<bits/stdc++.h>using namespace std;const int maxn = 200000 + 10;struct SBT { int cnt; int c[maxn][2], key[maxn], size[maxn]; void init() { cnt = 0; memset(c, 0, si原创 2016-07-31 20:45:56 · 648 阅读 · 0 评论 -
HDU 4010 Query on the tree LCT模板题
#include<bits/stdc++.h>using namespace std;const int INF = 0x7fffffff;const int maxn = 100000 + 10;int n, m;struct LinkCutTree { bool rt[maxn]; int rev[maxn], add[maxn]; int Val[maxn],原创 2016-08-04 13:59:13 · 417 阅读 · 0 评论 -
POJ 3580 较复杂的Splay区间维护题解题报告
一、浅谈Splay:在做完这道题后,我对Splay又有了一些新的理解,先简单的介绍一下:1. 在完成最普通的插入和查询时,Splay的时间复杂度可能会高于Treap等平衡树,但是只用它来维护点的信息是大材小用了的。2. Splay的核心操作就是伸展(将某个点旋转到某个点的下方),它不仅维护了一颗平衡树,还支持许多十分“高级”的功能(例如区间维护和动态树上的Preferred Path维护等),原创 2016-08-13 21:03:49 · 832 阅读 · 1 评论