代码:
#include <bits/stdc++.h>
using namespace std;
const int AND=-1,OR=-2,NOT=-3;
int p=0,n,q;
int compute(vector<int> expr,vector<int> &symbols ){
while(p < expr.size()){
if(expr[p] == AND) {
expr.pop_back();
int e1=expr.back();
expr.pop_back();
int e2=expr.back();
expr.pop_back();
expr.push_back(symbols[e1] & symbols[e2]);
}
if(expr[p] == OR) {
expr.pop_back();
int e1=expr.back();
expr.pop_back();
int e2=expr.back();
expr.pop_back();
expr.push_back(symbols[e1] | symbols[e2]);
}
if(expr[p] == NOT) {
expr.pop_back();
int e1=expr.back();
expr.pop_back();
expr.push_back(!symbols[e1]);
}
p++;
}
cout << expr[0] << endl;
}
int main(void){
vector<int> expr,symbols;
symbols.push_back(0);
string s,s2;
getline(cin,s);
istringstream ss(s);
while(ss >> s2){
if(s2[0] == '&') {
expr.push_back(AND);
}
if(s2[0] == '|') {
expr.push_back(OR);
}
if(s2[0] == '!') {
expr.push_back(NOT);
}
if(s2[0] == 'x') {
expr.push_back(atoi(s2.c_str()+1));
}
}
cin >> n;
for(int i=0;i<n;i++){
int x;
cin >> x;
symbols.push_back(x);
}
cin >> q;
for(int i=0;i<q;i++){
int r;
cin >> r;
symbols[r] = !symbols[r];
compute(expr,symbols);
symbols[r] = !symbols[r];
}
return 0;
}