パッと見計算量が厳しそうな問題ですが,$1 \le K \le 5$ と $K$ が小さいのが使えそうです.ボールを $K$ 個取り除いたあとの数列 $A$ の最小値としてありえる数は元の数列 $A$ の小さい順 $\mathrm{Best}\ K+1$ には入っているはずなので,$A$ の小さい順に $6$ 個取り出した数列だけ考えれば良いです.
I = input().split()
N, Q = int(I[0]), int(I[1])
A = list(map(int, input().split()))
minA = sorted(A)[:6]
for _ in range(Q):
K = int(input())
B = list(map(int, input().split()))
s = minA.copy()
for b in B:
if A[b-1] in s:
s.pop(s.index(A[b-1]))
print(s[0])
木のパスの状態について考えるときは DFS が刺さりますね.パス上の数と $2$ 回以上出現した数の個数を保持しながら DFS をして,ans 配列に記録していけば解くことが出来ます.
from collections import defaultdict
N = int(input())
A = list(map(int, input().split()))
G = [[] for _ in range(N)]
for _ in range(N-1):
U, V = map(int, input().split())
G[U-1].append(V-1)
G[V-1].append(U-1)
count = defaultdict(int)
cnt = 0
ans = [False] * N
stack = [(0, -1, True)]
while stack:
u, p, f = stack.pop()
if f:
count[A[u]] += 1
if count[A[u]] == 2:
cnt += 1
if cnt > 0:
ans[u] = True
stack.append((u, p, False))
for v in G[u]:
if v != p:
stack.append((v, u, True))
else:
if count[A[u]] == 2:
cnt -= 1
count[A[u]] -= 1
for a in ans:
print('Yes' if a else 'No')
まず $\big\lfloor \frac{N}{M} \big\rfloor \pmod {10007}$ ですが,これは典型として $N \pmod {M\times 10007}$ を $M$ で割った商に等しいですね.肝心のレピュニット数についてですが,$\frac{10^n-1}{9}$ としてしまうと $\gcd(9, M\times 10007) > 1$ のときに非常にややこしくなってしまうので $\begin{pmatrix} a_{n+1} \ 1 \end{pmatrix} = \begin{pmatrix} 10 & 1 \ 0 & 1 \end{pmatrix} \times \begin{pmatrix} a_n \ 1 \end{pmatrix}$ を用いて繰り返し二乗法で計算する方が良いです.(類題1, 類題2, 類題3)
K, M = map(int, input().split())
MOD = 10007 * M
def f(r, n, mod):
res = 0
sum = 1
pow = r
while n > 0:
if n % 2 == 1:
res = (res * pow + sum) % mod
sum = sum * (1 + pow) % mod
pow = pow ** 2 % mod
n //= 2
return res
ans = 0
for _ in range(K):
c, l = map(int, input().split())
hoge = c * f(10, l, MOD) % MOD
ans = (ans * pow(10, l, MOD) + hoge) % MOD
print(ans // M)