运行后一直显示程序访问到了一些奇奇怪怪的内存。
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/priority_queue.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#include<ext/pb_ds/trie_policy.hpp>
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
//#define MSOD
#define IOS
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
const int N = 5e3 + 5, M = 1e6 + 5, MOD = 998424353, INF = 0x7ffffffffff;
inline int getson(bool m, int p) {return m ? p << 1 | 1 : p << 1;}
inline int lowbit(int x) {return x & (-x);}
inline int gcd(int x, int y) {return y == 0 ? x : gcd(y, x % y);}
inline int lcm(int x, int y) {return x * y / gcd(x, y);}
inline int quick_pow(int a, int b) {int res = 1;while(b) {if(b & 1) {res *= a;}a *= a;b >>= 1;}return res;}
inline int quick_pow_mod(int a, int b, int m) {int res = 1;while(b) {if(b & 1) {res = res * a % m;}a = a * a % m;b >>= 1;}return res % m;}
int m, q, x;
string s;
inline int digit(string t) {
int res = 0;
for(auto i : t) {
if(!isdigit(i)) {
return -1;
} else {
res = res * 10 + i - '0';
}
}
return res;
}
inline int get(string t) {
if(t.size() == 1 && t[0] == 'x') {
return x;
} else if(digit(t) != -1) {
return digit(t);
} else {
int lit, sta, ok = 0;
for(lit = 2 ; lit < t.size() ; lit ++) {
if(ok == 0 && t[lit] == '?') {
break;
} else if(t[lit] == '?') {
ok ++;
} else if(t[lit] == ':') {
ok --;
}
}
int num1 = get(t.substr(2, lit - 2));
sta = lit;
++lit, ok = 0;
for( ; ok > -1 && lit < t.size() ; lit ++) {
if(t[lit] == '?') {
ok ++;
} else if(t[lit] == ':') {
ok --;
}
}
int num2 = get(t.substr(sta + 1, lit - sta - 1));
int num3 = get(t.substr(lit + 1));
if(t[1] == '>') {
return x > num1 ? num2 : num3;
} else {
return x < num1 ? num2 : num3;
}
}
}
inline void solve() {
cin>>m>>q>>s;
while(q --) {
cin>>x;
cout<<get(s)<<endl;
}
return;
}
signed main() {
// freopen("pairing3.in", "r", stdin);
// freopen("mine.out", "w", stdout);
#ifdef IOS
ios::sync_with_stdio(false);
cout.tie(nullptr);
cin.tie(nullptr);
#endif
int T = 1;
#ifdef MSOD
cin>>T;
#endif
while(T --) {
solve();
}
return 0;
}