#include #define left_son (node<<1) #define right_son (node<<1|1) #define mid ((st+dr)/2) using namespace std; const int Nmax = 1e5 + 5; int n, m, tests; char tip[Nmax]; int start[Nmax], finish[Nmax], dp1[Nmax], dp2[Nmax], best[Nmax]; vector v1[Nmax], v2[Nmax]; class SegmentTree { int a[Nmax<<2], lazy[Nmax<<2]; void cobor(int node) { if(!lazy[node]) return; a[node] += lazy[node]; lazy[left_son] += lazy[node]; lazy[right_son] += lazy[node]; lazy[node] = 0; } public: void reset() { for(int i=1; i<=(m<<2); ++i) a[i] = -Nmax, lazy[i] = 0; } void update(int node, int st, int dr, int pos) { if(dr <= pos) { ++lazy[node]; return; } cobor(node); update(left_son, st, mid, pos); if(mid < pos) update(right_son, mid+1, dr, pos); a[node] = max(a[left_son] + lazy[left_son], a[right_son] + lazy[right_son]); } int query() { return a[1] + lazy[1]; } void baga(int node, int st, int dr, int pos, int val) { if(st == dr) { a[node] = val; return; } cobor(node); if(pos <= mid) baga(left_son, st, mid, pos, val); else baga(right_son, mid+1, dr, pos, val); a[node] = max(a[left_son] + lazy[left_son], a[right_son] + lazy[right_son]); } } A1, A2; void solve() { A1.reset(); A2.reset(); cin >> m >> n; int i; for(i=1; i<=n; ++i) cin >> tip[i]; for(i=1; i<=n; ++i) cin >> start[i]; for(i=1; i<=n; ++i) cin >> finish[i]; for(i=1; i<=n; ++i) if(start[i] < finish[i]) { if(tip[i] == 'D' || tip[i] == 'M') v1[finish[i]].push_back(start[i]); else v2[finish[i]].push_back(start[i]); } int val1 = 0, val2 = 0; for(i=1; i<=m; ++i) { for(auto it : v1[i]) {A1.update(1, 1, m, it); val1 ++;} for(auto it : v2[i]) {A2.update(1, 1, m, it); val2 ++;} dp1[i] = max(val1, A1.query()); dp2[i] = max(val2, A2.query()); A2.baga(1, 1, m, i, dp1[i]); A1.baga(1, 1, m, i, dp2[i]); best[i] = max(dp1[i], dp2[i]); } int j = 0; for(i=1; i<=n; ++i) { while(j <= m && best[j] < i) ++j; if(j == m+1) cout << "-1 "; else cout << j << ' '; } cout << '\n'; for(i=1; i<=m; ++i) v1[i].clear(), v2[i].clear(); } int main() { // freopen("input", "r", stdin); // freopen("output", "w", stdout); cin.sync_with_stdio(false); cin >> tests; while(tests--) solve(); return 0; }