#include <bits/stdc++.h>
using namespace std;
#define MAX(a, b) ((a)>(b)?(a):(b))
#pragma GCC optimize(3,"Ofast","inline")
struct data{
bool e;
int a,x,y,z;//a:值 x:左子树 y:右子树 z:父节点 e:是否无效
}a[100001];
int n;
string q[1000001];
stack<int> w;
int aaa(string a) {
int i=0;
while(!(a[i]>='0'&&a[i]<='9')&&i<a.length())i++;
int sum=0;
while(i<a.length()) {
sum*=10;
sum+=int(a[i]-'0');
i++;
}
return sum;
}
void dfs(int x){
if(a[x].x==0&&a[x].y==0){
a[x].e=true;
return ;
}
if(a[x].x!=0)dfs(a[x].x);
if(a[x].y!=0)dfs(a[x].y);
return ;
}
int main() {
int s=0;
while(!(q[s].length()==1&&q[s][0]>='0'&&q[s][0]<='9')) {
cin>>q[++s];
}
n=aaa(q[s]);
int k=n+1;for(int i=1; i<=n*3; i++)a[i].z=i;
for(int i=1;i<=n;i++)cin>>a[i].a;
for(int i=1; i<=s-1; i++) {
if(q[i][0]=='x')w.push(aaa(q[i]));
else {
if(q[i][0]=='!') {
int x=w.top();
w.pop();
w.push(k);
a[x].z=a[k+1].z=k;
a[k].x=x;
a[k].y=k+1;
a[k].a=!a[x].a;
k+=2;
}
else {
int x=w.top();
w.pop();
int y=w.top();
w.pop();
if(q[i][0]=='&') {
w.push(k);
a[x].z=a[y].z=k;
a[k].a=a[x].a&a[y].a;
a[k].x=x;
a[k].y=y;
if(a[x].a==0)dfs(y);
if(a[y].a==0)dfs(x);
k++;
} else {
w.push(k);
a[x].z=a[y].z=k;
a[k].a=a[x].a|a[y].a;
a[k].x=x;
a[k].y=y;
if(a[x].a==1)dfs(y);
if(a[y].a==1)dfs(x);
k++;
}
}
}
}
k--;
int m,sum;
cin>>m;
for(int i=1;i<=k;i++)if(a[i].z==i){
sum=a[i].a;
break;
}
for(int i=1;i<=m;i++){
int d;cin>>d;
if(a[d].e)cout<<sum;
else cout<<!sum;
cout<<"\n";
}
return 0;
}
本蒟蒻不会输入输出,用了一个string数组后就MLE了,还有两个RE(悲)
求帮看!