rt,感谢神犇!!!
Ans:131071
Output:131070
#include <bits/stdc++.h>
#define in inline
#define rint register int
#define r(a) runtimerror(a)
#define w(a) wronganswer(a)
#define wl(a) wronganswer(a),putchar('\n')
#define ws(a) wronganswer(a),putchar(' ')
using namespace std;
typedef long long ll;
int n,m,x,len;
string opt[100010];
bitset <30> t[100010],num,ans;
template <typename t> in void runtimerror(t &a){
bool flag=false;char ch=getchar();a=0;
for(;!isdigit(ch);ch=getchar()) if(ch=='-') flag=true;
for(;isdigit(ch);ch=getchar()) a=(a<<3)+(a<<1)+(ch^48);
a=flag?~a+1:a;
}
template <typename t> void compilerror(t a){
if(a>9) compilerror(a/10);
putchar(a%10^48);
}
template <typename t> in void wronganswer(t a){
if(a<0) a=-a,putchar('-');
compilerror(a);
}
in int trans(){
for(rint i=1;i<=n;i++){
if(opt[i]=="AND") ans&=t[i];
else if(opt[i]=="OR") ans|=t[i];
else ans^=t[i];
}
return ans.to_ulong();
}
int dp(int pos,bool lim){
if(!pos) return trans();
if(lim&&num[pos]==0) return dp(pos-1,lim);
int want=1;
for(rint i=n;i;i--){
if(opt[i]=="AND"&&!t[i][pos]){want=0;break;}
else if(opt[i]=="OR"&&t[i][pos]){want=0;break;}
else if(opt[i]=="XOR"&&t[i][pos]) want^=1;
}
ans[pos]=want;
return dp(pos-1,lim&&want==num[pos]);
}
int main(){
r(n),r(m);
num=m;
for(rint i=1;i<=n;i++){
cin>>opt[i],r(x);
t[i]=x;
}
w(dp(30,true));
return 0;
}