首页 > 其他分享 >UVA11922 Permutation Transformer 题解

UVA11922 Permutation Transformer 题解

时间:2024-05-26 11:36:36浏览次数:35  
标签:rt Transformer int 题解 sum tree lson UVA11922 siz

题目传送门

前置知识

无旋 treap

解法

luogu P3391 【模板】文艺平衡树 不同的是本题翻转后需要放到整个序列的末尾。

由于需要翻转后放到末尾,故无旋 Treap 在维护文艺平衡树的过程中合并时跳着合并即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
struct BST
{
	const int INF=0x7f7f7f7f;
	int rt_sum,root;
	struct FHQ_Treap
	{
		int son[2],val,rnd,cnt,siz,lazy;
	}tree[100010];
	#define lson(rt) (tree[rt].son[0])
	#define rson(rt) (tree[rt].son[1])
	BST()
	{
		rt_sum=root=0;
		srand(time(0));
	}
	void pushup(int rt)
	{
		tree[rt].siz=tree[lson(rt)].siz+tree[rson(rt)].siz+tree[rt].cnt;
	}
	int build(int val)
	{
		rt_sum++;
		lson(rt_sum)=rson(rt_sum)=tree[rt_sum].lazy=0;
		tree[rt_sum].val=val;
		tree[rt_sum].rnd=rand();
		tree[rt_sum].cnt=tree[rt_sum].siz=1;
		return rt_sum;
	}
	void pushdown(int rt)
	{
		if(rt!=0&&tree[rt].lazy!=0)
		{
			swap(lson(rt),rson(rt));
			tree[lson(rt)].lazy^=1;
			tree[rson(rt)].lazy^=1;
			tree[rt].lazy=0;
		}
	}
	void split(int rt,int k,int &ls,int &rs)
	{
		if(rt==0)
		{
			ls=rs=0;
			return;
		}
		pushdown(rt);
		if(tree[lson(rt)].siz+tree[rt].cnt<=k)
		{
			ls=rt;
			split(rson(ls),k-tree[lson(rt)].siz-tree[rt].cnt,rson(ls),rs);
		}
		else
		{
			rs=rt;
			split(lson(rs),k,ls,lson(rs));
		}
		pushup(rt);
	}
	int merge(int rt1,int rt2)
	{
		if(rt1==0||rt2==0)
		{
			return rt1+rt2;
		}
		if(tree[rt1].rnd<tree[rt2].rnd)
		{
			pushdown(rt1);
			rson(rt1)=merge(rson(rt1),rt2);
			pushup(rt1);
			return rt1;
		}
		else
		{
			pushdown(rt2);
			lson(rt2)=merge(rt1,lson(rt2));
			pushup(rt2);
			return rt2;
		}
	}
	void insert(int val)
	{
		int ls,rs;
		split(root,val,ls,rs);
		root=merge(merge(ls,build(val)),rs);
	}
	void reverse(int l,int r)
	{
		int ls,rs,mid;
		split(root,r,ls,rs);
		split(ls,l-1,ls,mid);
		tree[mid].lazy^=1;
		root=merge(merge(ls,rs),mid);
	}
	void inorder(int rt)
	{
		if(rt!=0)
		{
			pushdown(rt);
			inorder(lson(rt));
			cout<<tree[rt].val<<endl;
			inorder(rson(rt));
		}
	}
}T;
int main()
{
	int n,m,l,r,i;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		T.insert(i);
	}
	for(i=1;i<=m;i++)
	{
		cin>>l>>r;
		T.reverse(l,r);
	}
	T.inorder(T.root);
	return 0;
}

标签:rt,Transformer,int,题解,sum,tree,lson,UVA11922,siz
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18213447

相关文章

  • 题解【CF798D Mike and distribution】
    题目链接思考方向:构造方法满足\(A\)的要求,再满足\(B\)的要求。如果只考虑\(A\),有一种显然的方案:将\(A\)从大到小排序,选出前\(\left\lfloor\frac{n}{2}\right\rfloor+1\)大的即可。但这样显然难以扩展,所以需要另寻方案。由于题目提供了额外的\(+1\),所以先将最大的......
  • UVA1674 闪电的能量 Lightning Energy Report 题解
    题目传送门前置知识树链剖分|线段树解法树链剖分后维护一个支持区间修改,单点查询的线段树即可。也可以树上差分,同146.DFS序3,树上差分1的\(1,2\)操作,时间复杂度比树链剖分更优。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#define......
  • CF1141E Superhero Battle 题解
    题目传送门简化题意给定\(H,n\)和一个长度为\(n\)的序列\(d\),求一个最小的\(m\)使得\(H+\sum\limits_{i=1}^{m}d_{(i-1)\bmodn+1}\le0\)。解法将式子移项后得到\(\sum\limits_{i=1}^{m}-d_{(i-1)\bmodn+1}\geH\)。将\(\sum\limits_{i=1}^{m}-d_{(i-1)\bmo......
  • SP14943 DRTREE - Dynamically-Rooted Tree 题解
    题目传送门前置知识树链剖分|线段树解法树剖换根,子树查询板子。类似换根DP的思路,我们发现换根后仅有祖先、子树、深度等会随祖先的变化而变化。设\(rt_{i}\)表示第\(i\)次操作的树根,\(x_{i}\)表示第\(i\)次操作的节点。接着进行大力分讨。当\(rt_{i}=x_{i}\)......
  • 图的dfs遍历题解
    本蒟蒻又来做题啦!看看今天做啥题。。。。题目描述时间:1s 空间:256M题目描述:给出一个无向图和一个起点s,输出这个图从s结点开始的DFS遍历序列。规定:节点邻居按照输入的顺序遍历输入格式:共M+1行。第11行包含33个正整数N,M,s,表示有N个点,M条边,起点为s。第2~M+1行包含2个用......
  • 【题解】 [USACO 2009 Mar] Cow Frisbee Team S
    题目描述题意分析从\(N\)个整数中取若干个(不能不选),且取的数之和为\(F\)的倍数的总方案数对\(10^8\)取余的值。思路这道题是一道二维线性DP。那么根据线性DP的解题方法。首先,找出题目的阶段性。这道题显而易见方案数随着选择的个数而变化,那么这道题就以选择的个数作为阶段......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • Tokio Marine & Nichido Fire Insurance Programming Contest 2024(AtCoder Beginner C
    A-WhoAtetheCake?题意:有三个嫌疑犯(1,2,3(号码))现在有两个证人他们指出谁不是嫌疑犯,你可以找到确定的那个罪人吗?找到输出这个人的号码没找到输出-1思路:如果两人指出的人是一个人则输出-1不是则输出6-a-b,因为1+2+3=6(sum)减去a,b肯定可以到达......
  • 题解:P8267 [USACO22OPEN] Counting Liars B & U208878 晴天
    其实,这个题,只需要最简单的枚举,加上最简单的二分查找即可~\(1\leN\le1000\)?枚举吧~咋枚举?显然,最好状态下Bessie的位置一定是某个\(p_i\),否则差一个就会导致有个奶牛要说谎。所以我们枚举(理论来讲要先去个重,这样快一点,不过貌似数据没有重的~)\(p_i\),每次遍历这帮奶牛看看有......