蒟蒻求助qwq
#include<bits/stdc++.h>
using namespace std;
string s;
int n,a[105000],b[105000];
int son[2050000][3],sym[2050000];//1:!,2:&,3:|;
int q,x,cnt,ans;
int dfs1(int u){
if(u<=n)return a[u];
if(sym[u]==1)return !dfs1(son[u][1]);
if(sym[u]==2){
int x=dfs1(son[u][1]),y=dfs1(son[u][2]);
if(x==0)b[son[u][2]]=1;
if(y==0)b[son[u][1]]=1;
return x&y;
}
if(sym[u]==3){
int x=dfs1(son[u][1]),y=dfs1(son[u][2]);
// if(u==6)cout<<x<<" "<<y<<" "<<son[u][1]<<endl;
if(x==1)b[son[u][2]]=1;
if(y==1)b[son[u][1]]=1;
return x|y;
}
}
void dfs2(int u,int flag){
if(u==0)return;
// cout<<u<<" "<<flag<<endl;
if(flag==1)b[u]=1;
if(b[u]==1)flag=1;
dfs2(son[u][1],flag);
dfs2(son[u][2],flag);
}
int main(){
getline(cin,s);
scanf("%d",&n);cnt=n;
for(int i=1;i<=n;++i)scanf("%d",&a[i]);
stack<int> st;
for(int i=0;i<s.size();i++){
if(s[i]==' '||(s[i]>='0'&&s[i]<='9'))continue;
if(s[i]=='x'){
int pos=0;
for(int j=i+1;s[j]!=' ';++j)pos=pos*10+s[j]-'0';
st.push(pos);
}
else{
if(s[i]=='!'){
son[++cnt][1]=st.top();
sym[cnt]=1;
st.pop();
st.push(cnt);
}
else if(s[i]=='&'){
son[++cnt][1]=st.top();
sym[cnt]=2;
st.pop();
son[cnt][2]=st.top();
st.pop();
st.push(cnt);
}
else if(s[i]=='|'){
son[++cnt][1]=st.top();
sym[cnt]=3;
st.pop();
son[cnt][2]=st.top();
st.pop();
st.push(cnt);
// if(cnt==6)cout<<son[cnt][1]<<" "<<son[cnt][2]<<endl;
}
// printf("%d %d %d %d %d ",i,cnt,sym[cnt],son[cnt][1],son[cnt][2]);
}
// printf("%d\n",st.top());
// if(cnt==4)printf("%d %d\n",son[cnt][1],son[cnt][2]);
}
// cout<<son[cnt][1]<<" "<<son[cnt][2]<<endl;
ans=dfs1(cnt);
dfs2(cnt,0);
scanf("%d",&q);
while(q--){
scanf("%d",&x);
if(b[x]==1)printf("%d\n",ans);
else printf("%d\n",!ans);
}
return 0;
}