#include using namespace std; const int N = 400000; class SegTree { public: vector seg, mark; SegTree() { seg=vector(N, 0); mark=vector(N, 0); } void push(int x) { seg[x*2] += mark[x]; mark[x*2] += mark[x]; seg[x*2+1] += mark[x]; mark[x*2+1] += mark[x]; mark[x] = 0; } int findMax(int x, int l, int r, int n) { if(r<=n) return seg[x]; push(x); int m = (l+r)/2; int p = findMax(x*2, l, m, n); if (n>m) p=max(p, findMax(x*2+1, m+1, r, n)); return p; } void pull(int x) { seg[x] = max(seg[x*2], seg[x*2+1]) + mark[x]; } void addOne(int x, int l, int r, int n) { if(r<=n) { if(lm) addOne(x*2+1, m+1, r, n); pull(x); } void chg(int x, int l, int r, int n, int v) { if(l==r) { seg[x] = v; mark[x] = 0; return; } push(x); int m = (l+r)/2; if(n<=m) chg(x*2, l, m, n, v); if(n>m) chg(x*2+1, m+1, r, n, v); pull(x); } }; vector minimumZooNumbers(int m, int n, vector t, vector s, vector d) { // Return a list of length n consisting of the answers vector dp(N, 0); vector evDM[N], evCE[N]; for(int i=0;i(); for(int i=0;i(); for(int i=0;i result(n); for(int i=1;i<=n;i++) if(i>dp[m]) result[i-1] = -1; else result[i-1] = lower_bound(dp.begin(), dp.begin()+m+1, i) - dp.begin(); return result; } int main() { int cases; cin >> cases; for(int a0 = 0; a0 < cases; a0++){ int m; int n; cin >> m >> n; vector t(n); for(int t_i = 0; t_i < n; t_i++){ cin >> t[t_i]; } vector s(n); for(int s_i = 0; s_i < n; s_i++){ cin >> s[s_i]; } vector d(n); for(int d_i = 0; d_i < n; d_i++){ cin >> d[d_i]; } vector result = minimumZooNumbers(m, n, t, s, d); for (ssize_t i = 0; i < result.size(); i++) { cout << result[i] << (i != result.size() - 1 ? " " : ""); } cout << endl; } return 0; }