Suponha que você receba um conjunto de intervalos sem interseção de números inteiros [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]
. (Onde [a,b]
é o conjunto de números inteiros maior ou igual a a
e menor ou igual a b
.)
O intervalo no índice X
cobre bX - aX + 1
valores. Ligaremos para este número cX
.
Dado que cada intervalo pode ser ...
- inalterado (permanece como
[aX,bX]
), - estendido para a direita em direção ao
+
lado do número da linhacX
(tornando-se[aX,bX + cX]
), - ou estendido para a esquerda em direção ao
-
lado do número da linhacX
(tornando-se[aX - cX,bX]
),
qual é o número máximo de valores que podem ser cobertos pela união de todos os intervalos atualizados, considerando que eles ainda são todos sem interseção?
Escreva uma função ou programa que use uma string do formulário [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]
e calcule esse máximo. Se estiver escrevendo uma função, retorne o valor. Se estiver escrevendo um programa completo, use stdin para entrada e imprima o valor em stdout (ou use as alternativas mais próximas).
Você pode assumir que todos os valores estão dentro dos limites inteiros de 32 bits com sinal normal e que aX
são menores ou iguais a bX
todos os índices X
. Os intervalos podem estar em qualquer ordem, nem sempre estão aumentando. Eles devem ser dados como uma string no formato acima. A cadeia pode estar vazia; nesse caso, a resposta será 0.
O menor envio em bytes vence.
Exemplo
Se a entrada fosse [-3,0],[1,2],[4,9]
a saída, seria 22. O intervalo do meio não tem espaço para expandir de qualquer maneira, portanto deve permanecer inalterado. Os intervalos esquerdo e direito podem ser estendidos para [-7,0]
e [4,15]
respectivamente. A união de [-7,0]
e [1,2]
e [4,15]
contém todos os valores de -7 a 15, exceto 3. Isso é 22 valores.
[5,6]
se tornar [3,8]
(para uma resposta de 6), ou pode ser justo [5,8]
ou [3,6]
(para uma resposta de 4)?