#include #define ELEPHANT 'E' #define DOG 'D' #define CAT 'C' #define MOUSE 'M' using namespace std; const int INF = 1e9 + 9, MAXN = 1e5, MAXM = 1e5; int t, n, m, s[MAXN], d[MAXN], maxZoos[2][MAXM], minZooNo[MAXM]; char type[MAXN]; struct Animal{ int s, d; int id; }; bool compareAnimals(const Animal &a, const Animal &b){ if (a.d < b.d || a.d == b.d && a.s < b.s || a.d == b.d && a.s == b.s && a.id < b.id) return true; else return false; } vectorv; int typeToID(char x){ if (x == ELEPHANT || x == CAT) return 0; else return 1; } int main(){ //freopen ("input.txt", "r", stdin); //freopen ("output.txt", "w", stdout); scanf ("%d", &t); while(t--){ scanf ("%d%d", &m, &n); for (int i = 0; i < n; i++) cin >> type[i];//scanf ("%c", &type[i]); for (int i = 0; i < n; i++) scanf ("%d", &s[i]); for (int i = 0; i < n; i++) scanf ("%d", &d[i]); v.clear(); for (int i = 0; i < n; i++){ Animal cur; cur.s = s[i]; cur.d = d[i]; cur.id = typeToID(type[i]); v.push_back(cur); } //printf ("%d %d\n", m, n); sort(v.begin(), v.end(), compareAnimals); //for (int i = 0; i < n; i++) // printf ("%d %d %d\n", v[i].d, v[i].s, v[i].id); //printf ("\n"); // 0 -> E, C // 1 -> D, M for (int i = 0; i <= m; i++){ maxZoos[0][i] = 0; maxZoos[1][i] = 0; } int ind = 0; for (int i = 1; i <= m; i++){ maxZoos[0][i] = maxZoos[0][i - 1]; maxZoos[1][i] = maxZoos[1][i - 1]; while (ind < n && v[ind].d == i){ if (v[ind].id == 0) maxZoos[0][v[ind].d] = max(maxZoos[0][v[ind].d], maxZoos[1][v[ind].s]) + 1; else maxZoos[1][v[ind].d] = max(maxZoos[1][v[ind].d], maxZoos[0][v[ind].s]) + 1; ind++; } } /*for (int i = 1; i <= m; i++) printf ("%d ", maxZoos[0][i]); printf ("\n"); for (int i = 1; i <= m; i++) printf ("%d ", maxZoos[1][i]); printf ("\n\n"); */ for (int i = 1; i <= n; i++) minZooNo[i] = -1; int animalsNo = 1; for (int i = 1; i <= m; i++){ int curNo = max(maxZoos[0][i], maxZoos[1][i]); if (curNo >= animalsNo){ for (int j = animalsNo; j <= curNo; j++) minZooNo[j] = i; animalsNo = curNo + 1; } } for (int i = 1; i <= n; i++) printf ("%d ", minZooNo[i]); printf ("\n"); } return 0; }