3085 - fsecv

De la Universitas MediaWiki
Versiunea din 3 iunie 2024 16:22, autor: AjM (discuție | contribuții) (Pagină nouă: == 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 e...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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()