3085 - fsecv

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Enunt

Se consideră un șir A format din N numere întregi, numerotate de la 1 la N. Numim secvență a șirului A orice succesiune de elemente consecutive din șir de forma A[i], A[i+1], …, A[j], cu 0 < i < j ≤ N.

Cerinţa

Fiind dat șirul A cu N numere întregi se cere să se răspundă la Q întrebări de forma: i j k (0 < i < j ≤ N). Pentru fiecare întrebare se cere să se determine câte numere din secvența A[i], …, A[j] au frecvența de apariții egală cu k.

Date de intrare

Fișierul de intrare fsecv.in conține pe prima linie numerele naturale nenule N și Q cu semnificația din enunț. Pe următoarea linie se găsesc N numere întregi ce reprezintă valorile șirului A. Pe următoarele linii se află descrierea celor Q întrebări, câte una pe linie, în formatul precizat i j k.

Date de ieșire

Fișierul de ieșire fsecv.out va conține Q linii. Pe fiecare linie se va găsi răspunsul întrebării i, cu 1 ≤ i ≤ Q.

Restricţii şi precizări

  • 2 < N ≤ 100.000
  • 1 < Q ≤ 100.000
  • 0 < k ≤ N
  • -100.000 ≤ A[i] ≤ 100.000; 1 ≤ i ≤ N

Exemplu

fsecv.in
11 3
1 2 4 3 2 5 6 4 5 2 1
1 6 2
2 7 3
4 11 1
fsecv.out
1
0
4


Explicație

Secvența la care se referă prima întrebare este 1,2,4,3,2,5, iar răspunsul este egal cu 1. Secvența la care se referă a doua întrebare este 2,4,3,2,5,6, iar răspunsul este egal cu 0. Secvența la care se referă a treia întrebare este 3,2,5,6,4,5,2,1, iar răspunsul este egal cu 4.

Rezolvare

def count_elements_with_frequency(sequence, k):
    frequency = {}
    for num in sequence:
        if num in frequency:
            frequency[num] += 1
        else:
            frequency[num] = 1

    count = 0
    for num in sequence:
        if frequency[num] == k:
            count += 1

    return count

def main():
    # Citirea datelor de intrare
    N, Q = map(int, input().split())
    sequence = list(map(int, input().split()))

    # Procesarea întrebărilor
    answers = []
    for _ in range(Q):
        i, j, k = map(int, input().split())
        count = count_elements_with_frequency(sequence[i-1:j], k)
        answers.append(count)

    # Afisarea rezultatului
    for count in answers:
        print(count)

if __name__ == "__main__":
    main()