3860 - consecutive1
Enunt[edit | edit source]
Se dă un șir (a[1], a[2], ..., a[n]) de numere naturale cuprinse între 1 și n. Se dau de asemenea Q interogări, fiecare prin două numere x, y: dacă s-ar ordona a[x], a[x+1], ..., a[y], se obține sau nu o secvență de numere consecutive? (De exemplu, 5,3,6,4 dacă e ordonată se obține 3,4,5,6, care este o secvență de numere consecutive).
Cerinţa[edit | edit source]
Dându-se Q întrebări, să se răspundă la acestea. La fiecare interogare, dacă prin sortare se obține o secvență de numere consecutive veți afișa valoarea 1, iar în caz contrar veți afișa valoarea 0.
Date de intrare[edit | edit source]
De la tastatură, de pe prima linie se citește numărul natural n. Pe linia a doua se află n numere naturale reprezentând elementele șirului. Pe a treia linie se află numărul Q, iar pe următoarele Q linii se găsesc câte două numere naturale x și y, 1 ≤ x ≤ y ≤ n, reprezentând câte o interogare.
Date de ieșire[edit | edit source]
La ecran se vor afișa pe o singură linie, fără spații, Q cifre din mulțimea {0, 1} reprezentând răspunsurile la fiecare întrebare.
Restricţii şi precizări[edit | edit source]
- Pentru 10 puncte, 3 ≤ n ≤ 50, 1 ≤ Q ≤ 100
- Pentru 30 puncte, n ≤ 300, Q ≤ 10.000
- Pentru 60 puncte, 10.000 ≤ n ≤ 100.000, Q ≤ 200.000
Exemplu[edit | edit source]
- Intrare
9 4 1 3 4 2 1 6 5 4 5 1 4 3 5 3 6 5 9 7 9
- Ieșire
01101
Explicație[edit | edit source]
Sunt 5 interogări. Întrebarea 1: 4 1 3 4 nu obține o secvență de numere consecutive, deci răspunsul este 0. Întrebarea 2: 3 4 2 obține o secvență de numere consecutive, deci răspunsul este 1. Întrebarea 3: 3 4 2 1 obține o secvență de numere consecutive, deci răspunsul este 1. Întrebarea 4: 2 1 6 5 4 nu obține o secvență de numere consecutive, deci răspunsul este 0. Întrebarea 5: 6 5 4 obține o secvență de numere consecutive, deci răspunsul este 1.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def can_form_consecutive_sequence(arr, x, y):
sorted_arr = sorted(arr[x-1:y]) for i in range(1, len(sorted_arr)): if sorted_arr[i] != sorted_arr[i-1] + 1: return False return True
def main():
n = int(input()) arr = list(map(int, input().split())) Q = int(input())
result = "" for _ in range(Q): x, y = map(int, input().split()) result += "1" if can_form_consecutive_sequence(arr, x, y) else "0"
print(result)
if __name__ == "__main__":
main()
</syntaxhighlight>