#include #include using namespace std; #define debug(x) cout<<#x<<" :: "< pii; const int N = 5e4 + 5; /***************************************************************************/ int st[2][N<<2]; int lazy[2][N<<2]; void updateLazy(int t, int in, int la, int ra) { st[t][in] += lazy[t][in]; if(la != ra) { int lt = (in<<1) + 1; int rt = lt + 1; lazy[t][lt] += lazy[t][in]; lazy[t][rt] += lazy[t][in]; } lazy[t][in] = 0; } void updateRange(int t, int in, int la, int ra, int l, int r, int val) { if(lazy[t][in]) updateLazy(t, in, la, ra); if(ra < l || r < la) return; if(l <= la && ra <= r) { lazy[t][in] = val; updateLazy(t, in, la, ra); return; } int lt = (in<<1) + 1; int rt = lt + 1; int mid = (la + ra) / 2; updateRange(t, lt, la, mid, l, r, val); updateRange(t, rt, mid+1, ra, l, r, val); st[t][in] = max(st[t][lt], st[t][rt]); } vector adj[N]; int dp[N]; vector minimumZooNumbers(int m, int n, vector &t, vector &s, vector &d) { // Return a list of length n consisting of the answers for(int i=1; i<=m; i++) adj[i].clear(); for(int i=0; i ans(n, -1); int st = 1; for(int i=1; i<=n; i++) { while(dp[st] < i) { st++; if(st > m) return ans; } ans[i-1] = st; } return ans; } 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 (unsigned i = 0; i < result.size(); i++) { cout << result[i] << (i != result.size() - 1 ? " " : ""); } cout << endl; } return 0; }