比赛的时候编译器没开O2,一直RE,结果一开O2就AC了,
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+9;
string s;
struct node{
int l,r;
};
int z[N],d[N],r;
int ans[N];
void solve(int l,int r,node X){
if(X.l>X.r)return;
if(s[l]!='x'){
int a=0;
for(int i=l;i<=r;i++)a=a*10+s[i]-'0';
for(int i=X.l;i<=X.r;i++)ans[i]=a;
return;
}
int x=l+2,a=0;
while(s[x]>='0'&&s[x]<='9'){
a=a*10+s[x]-'0';
++x;
}
int mid=d[x];
if(s[l+1]=='<'){
solve(x+1,mid-1,{X.l,a-1});
solve(mid+1,r,{a,X.r});
}else{
solve(x+1,mid-1,{a+1,X.r});
solve(mid+1,r,{X.l,a});
}
}
int m,q;
int main(){
scanf("%d%d\n",&m,&q);
cin>>s;
int n=s.length();
for(int i=0;i<n;i++){
if(s[i]=='?')z[++r]=i;
if(s[i]==':')d[z[r--]]=i;
}
solve(0,s.length()-1,{1,m+1});
while(q--){
int x;
scanf("%d",&x);
printf("%d\n",x<=m?ans[x]:ans[m+1]);
}
}