public void Solve() { // ???? ??? ??? Array.Sort(y, a); Array.Sort(yCopy, b); // ???????? ??? ??? Array.Sort(w, v); Array.Sort(wCopy, z); UnionFind uf = new UnionFind(N + 1); // ???????? ?????? int j = M - 1; for (int i = Q - 1; i >= 0; i--) { // ???? ?????? for (; j >= 0; j--) { // ????????? if (y[j] <= w[i]) { break; } // ?????????? uf.unionSet(a[j], b[j]); } // ??????? ans[z[i]] = uf.answer(v[i]); } // ?? for (int i = 0; i < Q; i++) { Console.WriteLine(ans[i]); } }