不知道为什么会MLE6个点(看了很久还是不知道)
#include<bits/stdc++.h>
using namespace std;
vector<int>q[500000];
int qqq[100001];
int aa[100001],lll;
char b[1000001];
int bc[1000001];
int cnt=0,cnt2=0;
string a;
struct node
{
int cnt;
bool x;
}t,tt;
stack<node>qq;
void huo()
{
tt=qq.top();
qq.pop();
t=qq.top();
if(tt.x==1&&t.x==1)
qq.top().cnt=0;
if(tt.x==1&&t.x==0)
{
qq.top().cnt=tt.cnt;
}
if(tt.x==0&&t.x==0)
{
q[qq.top().cnt].push_back(tt.cnt);
}
qq.top().x=tt.x|t.x;
}
void yu()
{
tt=qq.top();
qq.pop();
if(tt.x==0&&qq.top().x==0)
qq.top().cnt=0;
if(tt.x==0&&qq.top().x==1)
{
qq.top().cnt=tt.cnt;
}
if(tt.x==1&&qq.top().x==1)
{
q[qq.top().cnt].push_back(tt.cnt);
}
qq.top().x=tt.x&qq.top().x;
}
void ycl()
{
cnt=1;
for(int i=1;i<=cnt2;i++)
{
if(bc[i]<100010)
{
t.x=aa[bc[i]];
q[cnt].push_back(bc[i]);
t.cnt=cnt++;
qq.push(t);
}
else
{
char t=b[bc[i]-100010];
if(t=='|')
huo();
else
if(t=='&')
yu();
else
qq.top().x=!qq.top().x;
}
}
}
void inline pd(int x)
{
for(int i=0;i<q[x].size();i++)
{
qqq[q[x][0]]=1;
if(i>0)
pd(q[x][i]);
}
}
int main()
{
getline(cin,a);
for(int i=0;i<a.size();i++)
{
++cnt2;
while(i<a.size()&&a[i]!=' ')
{
if(a[i]=='x')
{i++;
while(i<a.size()&&a[i]!=' ')
{
bc[cnt2]=bc[cnt2]*10+a[i]-'0';
i++;
}
break;
}
b[++cnt]=a[i++];
bc[cnt2]=cnt+100010;
}
}
int n,ql;
cin>>n;
for(int i=1;i<=n;i++)
cin>>aa[i];
ycl();
pd(qq.top().cnt);
cin>>ql;
for(int i=1;i<=ql;i++)
{
cin>>lll;
if(qqq[lll])
cout<<!qq.top().x<<endl;
else
cout<<qq.top().x<<endl;
}
}