萌新妹子不会主席树,求调简单离线做法 70pts
查看原帖
萌新妹子不会主席树,求调简单离线做法 70pts
505643
syta楼主2023/2/11 20:24

rt,关键在于这题的加强版P6166我都过了。

有没有好心人帮我看看qwq

#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
const int N=1e5+5;
int n,tot,cnt,q;
int r[N],v[N];
char c[N],ans[N];
vector<int> g[N];
vector<pii> f[N];
string a;
void dfs(int x){
	a.push_back(c[x]);
	for(int i=0;i<g[x].size();i++){
		int y=g[x][i];
		dfs(y);
	}
    for(int i=0;i<f[x].size();i++){
        pii y=f[x][i];
        ans[y.second]=a[y.first];
    }
	a.pop_back();
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		char opt[5];
		scanf("%s",opt);
		if(opt[0]=='T'){
			char x[5];
			scanf("%s",x);
			r[++tot]=++cnt;
			c[cnt]=x[0];
			g[r[tot-1]].push_back(r[tot]);
		}else if(opt[0]=='Q'){
			int p;
			scanf("%d",&p);
			f[r[tot]].push_back({p,++q});
		}else{
			int u;
			scanf("%d",&u);
			tot++;
			r[tot]=r[tot-u-1];
		}
	}
    a=' ';
	dfs(1);
    for(int i=1;i<=q;i++)printf("%c\n",ans[i]);
	return 0;
}
2023/2/11 20:24
加载中...