不求满分,只求不RE!
#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
#include <stack>
#define N 100005
using namespace std;
int n;
int digit;
string s, s1;
bool f;
vector <int> suffix;
bool data[N];
int q, change;
void inp() {
getline(cin, s);
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &data[i]);
scanf("%d", &q);
}
bool isdigit(char ch) {
return ch >= '0' && ch <= '9';
}
bool compute_suffix() {
stack <bool> st;
for(auto a : suffix) {
if(a > 0)
st.push(data[a]);
else {
bool x, y, z;
if(a != -3) {
y = st.top();
st.pop();
x = st.top();
st.pop();
if(a == -1)
z = x & y;
else
z = x | y;
} else {
x = st.top();
st.pop();
z = !x;
}
st.push(z);
}
}
return st.top();
}
void work() {
for(int i = 0; i < s.size(); ++i) {
if(s[i] == 'x')
continue;
if(isdigit(s[i])) {
s1 += s[i];
f = 1;
} else if(f) {
f = 0;
s1 += ' ';
} else if(s[i] != ' ')
s1 += s[i];
}
for(int i = 0; i < s.size(); ++i) {
if(isdigit(s1[i]))
digit = digit * 10 + s1[i] - 48;
else if(s1[i] == ' ') {
suffix.push_back(digit);
digit = 0;
} else {
if(s1[i] == '&')
suffix.push_back(-1);
else if(s1[i] == '|')
suffix.push_back(-2);
else if(s1[i] == '!')
suffix.push_back(-3);
}
}
while(q-- && scanf("%d", &change)) {
data[change] ^= 1;
printf("%d\n", compute_suffix());
data[change] ^= 1;
}
}
int main() {
inp();
work();
return 0;
}