Example #1
0
        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]);
            }
        }