3085 - fsecv
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>