3085 - fsecv

From Bitnami MediaWiki

Enunt[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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

Exemplu[edit | edit source]

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[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line> 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()

</syntaxhighlight>