/* .:*+=%@@@@@@=-. .:=@#@@@#@@#######%==*. .-=####@######%*-.....:%##%. .*@###########%+:--........-%@- .*@##############@+--.........-:%- .+##################@==%%%%=+*:----+. .-@####################%++%@@@@@=+**%@@* .%###################@%%@@@###@%+:--%@@%. -@###################@%%%%*::*%++:-----=@+. -#####################@%=++++++*:-------.-=: .+####################@%++*::-:::--::*:::***=: .@#####################%=++*::::-:::++*=##@@#@- ..#####################@%%=++**:::::**+%@#@%%##-.. .%####################@@%=+++*+****::*=@######@. .=######################@%%==+==++**+=@%@##@###+:... -#######################@@@%%%===++=@@@%=++===*::--... -########################@@@@@@@%==%%=++==@@:::::*:--. ..:#########################@@@@@@%%======++++::-..:-.--... %#############################@###@%%@@%==%=%*----.--.::---. #############################################*-:*:-:---*---- . #############################################*--*--:---*---:-. #############################################+--::--::-*::-::. ###########################################+:*-.---.---.:---*-.. ###########################################**:-----------------. ##########################################@::**:--::::::--:::::- ###########################################:--:*:::::::::**::*+* ###########################################=:::***::::::**:::*+* ############################@@@@@@#########@+****::::********+++ ############################@%%%%%@@@@@@@###%+***::::::::***+==+ ############################@%%%%%%%%%%%@####=+:::-::::-::*+=%%+ #############################@%%%%%%%%%%@#####=::--------:*=%@%+ %###########################@%%%%==%%%%%%@##@#=:------..-:+%@@%= ---------------------------------------------- -------------------------------------------- ---------------------------------------------- -------------------------------------------- ---------------------------------------------- o###########oo o##" ""##o o#" "## o#" "#o #" ## ## "## #" ## # ################### # # # # # # # # # # # # # #o # "#o ## "#o ## "#o o#" "#o ## "#o o#" "#ooo ooo#######oo ############### "######o o###"" "###o # ### o###o oooo ### oo####" o###**# #**# ############" ""##""""""""""########### # # oooooooo#"#** ## # # # # # ** ## # #o# #o# *****###ooo# ## ## o###o ## o##***## o########## #***#**##o o##" ""### #***##***# o#######o ### oo#### ##**####*# o##" ""#############"" ##****### ##" ## ##*##*### ## ### ##### ## ## ### # ## # ## ## # ## ## ## ### ## ###oo ### ""### ### ### */ #include //#pragma GCC optimize("O3") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx") //#pragma GCC target("avx,tune=native") using namespace std; typedef long long ll; typedef long double ld; mt19937 rnd(13372823); ll AR = 19, BR = 13, CR = 23, XR = 228, YR = 322, MODR = 1e9 + 993; ll myrand(){ ll ZR = (XR * AR + YR * BR + CR) % MODR; XR = YR; YR = ZR; return ZR; } const int Mod = 1e9 + 7; int bpow(int x, int y){ if (y == 0) return 1; if (y == 1) return x; int ret = bpow(x, y >> 1); ret = (ret * (ll)ret) % Mod; if (y & 1) ret = (ret * (ll)x) % Mod; return ret; } int bdiv(int x, int y){ return (x * (ll)bpow(y, Mod - 2)) % Mod; } const ll llinf = 1e18 + 100; const int maxn = 5e4 + 100, inf = 1e9 + 100, sq = 300; int n, m; int tp[maxn]; pair seg[maxn]; int q[2][4 * maxn], u[2][4 * maxn]; void build(int t, int v, int l, int r){ q[t][v] = 0; u[t][v] = 0; if (l == r) return; int m = (l + r) / 2; build(t, 2 * v, l, m); build(t, 2 * v + 1, m + 1, r); } void push(int t, int v, int l, int r){ if (u[t][v] == 0) return; q[t][v] += u[t][v]; if (l != r) u[t][2 * v] += u[t][v], u[t][2 * v + 1] += u[t][v]; u[t][v] = 0; } void update(int t, int v, int tl, int tr, int l, int r, int val){ push(t, v, tl, tr); if (l > r) return; if (tl == l && tr == r){ u[t][v] += val; push(t, v, tl, tr); return; } int m = (tl + tr) / 2; update(t, 2 * v, tl, m, l, min(r, m), val); update(t, 2 * v + 1, m + 1, tr, max(l, m + 1), r, val); q[t][v] = max(q[t][2 * v], q[t][2 * v + 1]); } int answer[maxn]; vector fin[maxn][2]; void cl(){ for (int i = 0; i < 2; i++) build(i, 1, 0, m - 1); for (int i = 0; i < m; i++) for (int j = 0; j < 2; j++) fin[i][j].clear(); for (int i = 1; i <= n; i++) answer[i] = m; } int main() { #ifdef ONPC //ifstream cin("a.in"); //ofstream cout("a.out"); freopen("a.in", "r", stdin); freopen("a.out", "w", stdout); #else //ifstream cin("a.in"); //ofstream cout("a.out"); //freopen("trap.in", "r", stdin); //freopen("trap.out", "w", stdout); #endif // ONPC ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tst; cin >> tst; while (tst--){ cin >> m >> n; cl(); for (int i = 0; i < n; i++){ char c; cin >> c; if (c == 'E' || c == 'C') tp[i] = 0; else tp[i] = 1; } for (int i = 0; i < n; i++){ cin >> seg[i].first; seg[i].first--; } for (int i = 0; i < n; i++){ cin >> seg[i].second; seg[i].second--; if (seg[i].first <= seg[i].second) fin[seg[i].second][tp[i]].push_back(i); } for (int i = 0; i < m; i++) for (int j = 0; j < 2; j++){ for (auto id : fin[i][j]) update(j ^ 1, 1, 0, m - 1, 0, seg[id].first, 1); int now = q[j ^ 1][1]; answer[now] = min(answer[now], i); update(j, 1, 0, m - 1, i, i, now); } for (int i = n - 1; i > 0; i--) answer[i] = min(answer[i], answer[i + 1]); for (int i = 1; i <= n; i++) if (answer[i] == m) cout << -1 << ' '; else cout << answer[i] + 1 << ' '; cout << '\n'; } }