1639 - Secvente 3
Considerăm şirul de numere naturale nenule distincte . Notăm cu lungimea maximă a unei secvențe de elemente cu valori consecutive care se poate obţine prin ordonarea crescătoare a primelor i
elemente din şirul dat. De exemplu, pentru șirul 7, 2, 3, 8, 20, 4, 10, 9
avem: .
Cerința[edit | edit source]
Să se determine .
Date de intrare[edit | edit source]
Fişierul input.txt
conţine pe prima linie numărul natural N
. Pe fiecare din următoarele N
linii se găseşte câte un număr natural, deci pe linia i+1
se va afla elementul , pentru i=1...N
.
Date de ieșire[edit | edit source]
Fişierul output.txt
conţine exact N
linii. Pe linia i
(i = 1...N
) se va afișa valoarea .
Restricții și precizări[edit | edit source]
3 ≤ N ≤ 200.000
Exemplul 1[edit | edit source]
input.txt:
8
7
3
2
8
20
4
10
9
output.txt:
1
1
2
2
2
3
3
4
Explicație:
L1 Șirul: 7
. Lungime maximă 1
.
L2 Șirul: 7, 3
. Lungime maximă 1
.
L3 Șirul: 7, 3, 2
. Şirul sortat este 2, 3, 7
. Lungimea maximă este 2
(dată de secvenţa 2, 3
).
L4 Șirul: 7, 3, 2, 8
. Lungime maximă 2
(dată de 2, 3
)
L5 Șirul: 7, 3, 2, 8, 20
. Lungime maximă 2
(dată de 2, 3
).
L6 Șirul: 7, 3, 2, 8, 20, 4
. Şirul sortat este 2, 3, 4, 7, 8, 20
. Lungimea maximă este 3
(dată de secvenţa 2, 3, 4
).
L7 Șirul: 7, 3, 2, 8, 20, 4, 10
. Lungime maximă 3
(dată de 2, 3, 4
).
L8 Șirul: 7, 3, 2, 8, 20, 4, 10, 9
. Şirul sortat este 2, 3, 4, 7, 8, 9, 10, 20
. Lungimea maximă este 4
(dată de secvenţa 7, 8, 9, 10
).
Exemplul 2[edit | edit source]
input.txt:
999999999
7
3
2
8
20
4
10
9
Output:
Input-ul nu convine conditiilor
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def verificare(n):
if not(3<=n<=200000): print("Input-ul nu convine conditiilor") exit()
infile = "input.txt" outfile = "output.txt" nMax = 200013 vMax = 1000013
vz = [False] * vMax v = [0] * nMax pos = [0] * vMax n = 0
def read():
global n with open(infile, "r") as fin: n = int(fin.readline().strip()) verificare(n) for i in range(n): v[i + 1] = int(fin.readline().strip()) assert not vz[v[i + 1]] vz[v[i + 1]] = True
def solve():
global n best = 0
with open(outfile, "w") as fout: for i in range(1, n + 1): begin, end = v[i], v[i]
if pos[v[i] - 1]: begin = pos[v[i] - 1] if pos[v[i] + 1]: end = pos[v[i] + 1]
pos[begin] = end pos[end] = begin
best = max(best, end - begin + 1) fout.write(f"{best}\n")
if __name__ == "__main__":
read() solve()
</syntaxhighlight>