yangyafan @ 2024-10-18 15:16:29
我看别人都是没开LL才这样的
不求AC,能把我暴力改好就行,玄关
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
struct F1{
int pos,x;
}f1[100010],f[100010];
struct F3{
int sum;
vector<int> s;
}f3[100010];
int a[100010],f2[100010],cnt1,cnt2,cnt3,tag[100010],n;
void dfs(int x,int y){
if(x==1){
a[f1[y].pos]*=tag[f1[y].pos]%mod,a[f1[y].pos]%=mod,a[f1[y].pos]+=f1[y].x%mod,tag[f1[y].pos]=1;
return ;
}
else if(x==2){
for(int i=1;i<=n;i++) tag[i]*=f2[y]%mod;
return ;
}
else {
int len=f3[y].sum;
for(int i=0;i<len;i++) dfs(f[f3[y].s[i]].x,f[f3[y].s[i]].pos);
return ;
}
}
signed main(){
for(int i=0;i<=100005;i++) tag[i]=1;
int m,q;
cin >>n;
for(int i=1;i<=n;i++) cin >>a[i];
cin >>m;
for(int i=1;i<=m;i++){
int op;
cin >>op;
if(op==1) cin >>f1[cnt1].pos>>f1[cnt1].x,f[i].pos=cnt1++,f[i].x=1;
else if(op==2) cin >>f2[cnt2],f[i].pos=cnt2++,f[i].x=2;
else {
cin >>f3[cnt3].sum;
for(int i=0;i<f3[cnt3].sum;i++){
int x;
cin >>x;
f3[cnt3].s.push_back(x);
}
f[i].pos=cnt3++,f[i].x=3;
}
}
cin >>q;
for(int i=1;i<=q;i++){
int x;
cin >>x;
int p=f[x].x,q=f[x].pos;
dfs(p,q);
}
for(int i=1;i<=n;i++) cout <<(a[i]%mod*tag[i]%mod)%mod<<" ";
return 0;
}