首页 > TAG信息列表 > p3391

P3391 【模板】文艺平衡树 解法

P3391 【模板】文艺平衡树splay解法1 #include <bits/stdc++.h> using namespace std; const int N = 100005; int ch[N][2], par[N], val[N], cnt[N], size[N], rev[N], root, ncnt; int n, m, x, y; void output(int x); bool chk(int x) { return ch[par[x]][1] == x; }

【洛谷p3391】 Splay模板 文艺平衡树

题目 模板题。 注意标记即可,另外,涉及区间翻转操作,记得设立首尾哨兵。 #include<bits/stdc++.h> using namespace std; const int Maxn=0x3f3f3f3f; const int N=1e5+5; int lc[N],rc[N],fa[N],sze[N],vi[N],pos[N],a[N]; int n,m,x,y,rt,T; inline int get(){//快读 char ch;

Splay维护序列 & 洛谷 P3391 【模板】文艺平衡树

传送门 解题思路 Splay如何维护序列呢? 以序列下标作为val值,扔到Splay中。 因为有区间翻转操作,所以实际上并不能保证绝对的按照val值排序,也就是说Splay的中序遍历结果是真正的序列,而val值对应的是当前序列的每个元素原来的位置。 与普通的Splay的区别在于多了一个区间翻转操作,可以

P3391 【模板】文艺平衡树 题解

描述: 给定 \(1\) 个长度为 \(n\) 的区间,有 \(m\) 次操作,每次反转区间 \([l,r]\) , 求最后的序列。 思路: 区间操作,可以用平衡树中的 Splay 来解决。 不会平衡树的同学可以点这里: \(\mathtt{BST}\) 学习笔记 \(\mathtt{Splay}\) \(\mathtt{Treap}\) 下文默认会 Splay 的基础操

luogu P3391 【模板】文艺平衡树(Splay)

嘟嘟嘟 突然觉得splay挺有意思的…… 这道题只有一个任务:区间翻转。 首先应该知道的是,splay和线段树一样,都可以打标记,然后走到每一个节点之前先下传。 那怎么打标记呢?还应该有“区间”的思想。 对于区间\([L, R]\),想办法把这个区间所在的子树提取出来,然后打个标记即可。 那怎么提

洛谷 P3391 【模板】文艺平衡树(Splay)

题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式: 第一行为n,m n表示初始序列有n个数

P3391 【模板】文艺平衡树

题目链接: #include <bits/stdc++.h> using namespace std; #define ll long long #define re register const int N=1e6+10; void read(int &a) { a=0;int d=1;char ch; while(ch=getchar(),ch>'9'||ch<'0') if(ch=='

P3391 【模板】文艺平衡树(Splay) 平衡树

   题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入格式 第一行为n,m n表示初始序列有n个数,这个

Luogu P3391 【模板】文艺平衡树 Splay 平衡树

https://www.luogu.org/problemnew/show/P3391 以前写过题解的入门题重写练板子。wdnmd真就 ' == ' 写成 ' = ' 了编译器不报错呗。 #include<bits/stdc++.h>using namespace std;const int maxn=100010;int n,m,rt=0,c[maxn][2]={},fa[maxn]={},rev[maxn]={},siz[maxn]={};inli

洛谷 p3391

题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式:   第一行为n,m n表示初始序列有n个