2276 - Cb
Enunt
Se consideră un șir a[1], a[2], …, a[n] de numere naturale. Se dau și T intervale închise de forma [x, y], cu x ≤ y.
Cerință
Pentru fiecare din cele T intervale de forma [x, y] trebuie să răspundeți la întrebarea: câte numere din șir aparțin intervalului [x, y]?
Date de intrare
Programul citește de la tastatură numerele n și T, apoi n numere naturale, separate prin spații, a[1], a[2], …, a[n]. Pe următoarele T linii se află câte două numere naturale x și y reprezentând un interval [x, y].
Date de ieșire
Programul va afișa pe ecran T linii. Pe fiecare linie i (i=1..T) se va afla un singur număr natural reprezentând răspunsul la a i-a întrebare.
Restricții și precizări
- 1 ≤ n, T ≤ 200 000
- 0 ≤ a[i] ≤ 2 000 000 000
- 0 ≤ x ≤ y ≤ 2 000 000 000
Exemplul 1
- Intrare
9 7 6 1 3 5 3 3 9 20 9 4 10 0 100 0 1 500 506 3 3 10 18 3 9
- Ieșire
4 9 1 0 3 0 7
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1">
def validate_input(n, T, a, intervals):
if len(a) != n: return False for x, y in intervals: if x > y: return False return True
def count_numbers_in_intervals(n, T, a, intervals):
if not validate_input(n, T, a, intervals): return []
counts = [] for x, y in intervals: count = 0 for num in a: if x <= num <= y: count += 1 counts.append(count)
return counts
if __name__ == '__main__':
n, T = map(int, input().split()) a = list(map(int, input().split()))
intervals = [] for i in range(T): x, y = map(int, input().split()) intervals.append((x, y))
counts = count_numbers_in_intervals(n, T, a, intervals)
for count in counts: print(count)
</syntaxhighlight>