#include <iostream>
#include <cstdio>
#include <stack>
#include <cstring>
#include <cmath>
using namespace std;
struct node{
int num;
char ysf;
};
string str;
node tree[100050];
int i,p=1;
int Num(){
i++;
int ans=0;
stack<int> s;
while(int(str[i])>=48&&int(str[i])<=57){
int h=int(str[i])-48;
s.push(h);
i++;
}
int n=s.size();
for(int j=0;j<n;j++){
ans+=s.top()*pow(10,j);
s.pop();
}
return ans;
}
// int qgen(int p){
// if (p==1) return p;
// if(!p%2) {
// return ++p;
// }
// else{
// p=p/2;
// //cout<<p;
// p=qgen(p);
// }
// return -1;
// }
int qgen(int p) {
while (p % 2 != 0) {
p = p / 2;
}
return p + 1;
}
int main(){
long m,q;
cin>>m>>q>>str;
int n=str.size();
for(i=0;i<n;){
if(str[i]=='x') {
tree[p].ysf=str[++i];
tree[p].num=Num();
//cout<<tree[p].num;
}
if(str[i]=='?') {
p*=2;
// cout<<p<<'?'<<'\n';
i++;
}
if(str[i]==':'){
p=qgen(p);
// cout<<p<<':'<<'\n';
i++;
}
if(int(str[i])>=48&&int(str[i])<=57){
tree[p].ysf='=';
i--;
tree[p].num=Num();
}
}
// for(int j=0;j<m;j++){
// cout<<tree[j].num<<' '<<tree[j].ysf<<'\n';
// }
for(int i=0;i<q;i++){
int T;
cin>>T;
int j=1;
while(tree[j].ysf!='='){
if(tree[j].ysf=='>'){
if(tree[j].num<T) j*=2;
else j=j*2+1;
}
if(tree[j].ysf=='<'){
if(tree[j].num>T) j*=2;
else j=j*2+1;
}
}
cout<<tree[j].num<<'\n';
}
return 0;
}
为什么会RE啊 明明开够大了 大佬们救救,呜呜呜