def inputints(): """Přečte řádek mezerou oddělených čísel, vrátí je v seznamu.""" return list(map(int, input().split())) def vyrob_prepocitavatko(A): """Dostane A, pole zaneprázdněností. Vrátí M = počet různých zaneprázdněností a funkci, která přepočítává zaneprázdněnosti z A na čísla 1 až M. Vrácená funkce vrací None, pokud se daná zaneprázdněnost v původním poli nenacházela.""" preklad = {} M = len(set(A)) for i, a in enumerate(set(A)): preklad[a] = i def preloz(cislo): return preklad.get(cislo, None) return M, preloz def lower_bound(A, x): """Vrátí největší i takové, že A[i] <= x. A musí být seřazené.""" l, r = 0, len(A) - 1 nejvetsi = -1 while l <= r: c = (l + r) // 2 if A[c] <= x: nejvetsi = c l = c + 1 else: r = c - 1 return nejvetsi def pocet_do(H, i, p): """Vrací počet výskytů hodnoty h v databázi na pozicích 1 až i. Využívá předpočítané tabulky p.""" return lower_bound(p[H], i) A = inputints() # Přečíslování M, preloz = vyrob_prepocitavatko(A) for i, a in enumerate(A): A[i] = preloz(a) # Předvýpočet p = [[] for i in range(M)] for i, a in enumerate(A): p[a].append(i) # Dotazy def dotaz(l, r, H): """Kolikrát se v poli mezi indexy l a r vyskytuje hodnota H?""" H = preloz(H) if H is None: # Hodnota se v poli nevyskytuje return 0 do_r = pocet_do(H, r, p) do_l = pocet_do(H, l - 1, p) return do_r - do_l Q = int(input()) for q in range(Q): l, r, h = inputints() print(dotaz(l, r, h))