#include using namespace std; int difMin; struct Matching { int m, n; vector l, r; vector vis, ok; vector>> adj; Matching(int m, int n) : m(m), n(n), l(n), r(m), vis(m), ok(m), adj(m) {} void addEdge(int x, int y, int c) { adj[x].push_back({y,c}); } void sorteaza() { for (int i=1;i a, pair b) { return a.second > b.second; }); } bool pairUp(int v) { if(vis[v]) return false; vis[v] = true; for(auto u : adj[v]) { if (u.second < difMin) break; if(l[u.first] == -1) return l[u.first] = v, r[v] = u.first, true; } for(auto u : adj[v]) { if (u.second < difMin) break; if(pairUp(l[u.first])) return l[u.first] = v, r[v] = u.first, true; } return false; } int matching() { int sz; bool changed; l.assign(n, -1); r.assign(m, -1); for(sz=0, changed=true; changed; ) { vis.assign(m, false); changed = false; for(int i=0; i>t; while(t) { t--; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; g = Matching(n+1, n+1); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { g.addEdge(i, j, abs(a[i]-b[j])); } g.sorteaza(); int st=0, dr=1e9, mij, last = 0; while(st <= dr) { mij = (st+dr)/2; if( ok(mij) ) { last = mij; st = mij+1; } else dr = mij-1; } cout<