#include<bits/stdc++.h>
using namespace std;
int node[100020],nidx;//node[1]是根节点
int lnxt[100020];//冒号左边节点编号
int rnxt[100020];//冒号右边节点编号
int wh[100020];// 1 是<,2是>
int m,q;
string s;
int tree(int kt){
++nidx;
int val=0,wv=0;
int tn=nidx;
for(int i=kt;i<s.size() ;i++){
if(s[i]=='?'){
wh[tn]=wv;
node[tn]=val;
lnxt[tn]=nidx+1;
int tmp=tree(i+1);
rnxt[tn]=nidx+1;
tmp=tree(tmp);
//递归
return tmp;
}
if(s[i]==':'){
node[tn]=val;
//cout<<"i+1="<<i+1<<endl;
//到尽头了(当前这一个),返回下一个位置
return i+1;
}
if(s[i]=='<')
wv=1;
else if(s[i]=='>')
wv=2;
}
if(s[i]>='0'&&s[i]<='9'){
val*=10;
val+=s[i]-'0';
}
}
}
int run(int nod,int x){//按顺序遍历树 ,经测试,正确
int n=node[nod];
if(!wh[nod]){
return n;
}
if(wh[nod]==1)
if(x<n)run(lnxt[nod],x);
else run(rnxt[nod],x);
else
if(x>n)run(lnxt[nod],x);
else run(rnxt[nod],x);
}
int main(){
cin>>m>>q;
cin>>s;
s+=':';
tree(0);
for(int i=0;i<q;i++){
int op;
cin>>op;
cout<<run(1,op)<<endl;
}
return 0;
}
上次发的帖子没人回复,不会是代码换行太多了吧……上次是用平板操作的,不好弄,这次应该好了吧。。。我到底是哪里错了呢??大家能帮我看看吗?