悬关,关于一种假掉的做法
查看原帖
悬关,关于一种假掉的做法
117192
无产者万岁楼主2023/11/4 23:05
#include <bits/stdc++.h>
using namespace std;
struct FHQ_Treap
{
	int lc,rc,siz,key,col,tag[26];
}tree[100005];
string s;
int T;
int root,idx;
int new_node(int col)
{
	++idx;
	tree[idx].lc=tree[idx].rc=0;
	tree[idx].siz=1;
	tree[idx].key=rand();
	tree[idx].col=col;
	for(int i=0;i<26;i++)
		tree[idx].tag[i]=-1;
	return idx; 
}
void push_up(int id)
{
	tree[id].siz=tree[tree[id].lc].siz+tree[tree[id].rc].siz+1;
}
void push_down(int id)
{
	if(tree[id].tag[tree[tree[id].lc].col]!=-1)
		tree[tree[id].lc].col=tree[id].tag[tree[tree[id].lc].col];
	if(tree[id].tag[tree[tree[id].rc].col]!=-1)
		tree[tree[id].rc].col=tree[id].tag[tree[tree[id].rc].col];
	for(int i=0;i<26;i++)
	{
		if(tree[id].tag[i]==-1)
			continue;
		tree[tree[id].lc].tag[i]=tree[tree[id].rc].tag[i]=tree[id].tag[i];
		tree[id].tag[i]=-1;
	}
}
void split(int id,int rnk,int &x,int &y)
{
	if(!id)
	{
		x=y=0;
		return;
	}
	push_down(id);
	if(tree[tree[id].lc].siz+1<=rnk)
	{
		x=id;
		split(tree[id].rc,rnk-tree[tree[id].lc].siz-1,tree[id].rc,y);
	}
	else
	{
		y=id;
		split(tree[id].lc,rnk,x,tree[id].lc);
	}
	push_up(id);
}
int merge(int x,int y)
{
	if(!x||!y)
		return x+y;
	if(tree[x].key>tree[y].key)
	{
		push_down(x);
		tree[x].rc=merge(tree[x].rc,y);
		push_up(x);
		return x;
	}
	else
	{
		push_down(y);
		tree[y].lc=merge(x,tree[y].lc);
		push_up(y);
		return y;
	}
}
void Update(int l,int r,int col1,int col2)
{
	int rx,ry,rz;
	split(root,r,rx,rz);
	split(rx,l-1,rx,ry);
	tree[ry].tag[col1]=col2;
	if(tree[ry].col==col1)
		tree[ry].col=col2;
	root=merge(merge(rx,ry),rz);
}
void DFS(int id)
{
	push_down(id);
	if(tree[id].lc)
		DFS(tree[id].lc);
	cout<<char(tree[id].col+'a');
	if(tree[id].rc)
		DFS(tree[id].rc);
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	srand(time(0));
	cin>>s;
	for(int i=0;i<s.size();i++)
		root=merge(root,new_node(s[i]-'a'));
	cin>>T;
	while(T--)
	{
		int l,r;
		char c1,c2;
		cin>>l>>r>>c1>>c2;
		Update(l,r,c1-'a',c2-'a');
	}
	DFS(root);
	return 0;
}

应该是我想假了,但不知道错在哪里。有大佬能指出错在哪里,或给一份hack数据吗?谢谢

2023/11/4 23:05
加载中...