Problema B - Fraude Fiscal

As finanças mantêm um histórico de N dias de atividade de uma empresa. No dia i a empresa reportou um lucro de Si, um inteiro que pode ser positivo, negativo ou zero. Para detetar automaticamente se houve alguma fraude fiscal, as finanças procuram certos padrões nos valores de lucro e por isso precisam de um programa que calcule informação específica sobre estes dados.

É dado um par de inteiros L e R, tais que LR. Um intervalo de dias tem um valor suspeito se a soma dos lucros nesse intervalo está entre L e R. Mais formalmente, dado um intervalo (a, b), onde ab, este intervalo é suspeito se LSa + Sa + 1 + ... + SbR.

Parte I

Determina o número de intervalos suspeitos.

Exemplo

Se N = 6, L = 2, R = 3 e tivermos os seguintes lucros:

Então temos os seguintes intervalos cuja soma está entre 2 e 3: (1, 2), cuja soma é 2; (4, 5), cuja soma é 3; (5, 5), cuja soma é 2; (5, 6), cuja soma é 3. No total há 4 intervalos suspeitos.

Restrições:

São garantidos os seguintes limites em todos os casos de teste desta parte que irão ser colocados ao programa:

1 ≤ N ≤ 100 000 Número de dias
1 ≤ L ≤ R ≤ 1 000 000 Intervalos suspeitos
-1 000 000 ≤ Si ≤ 1 000 000 Valores de lucro

Os casos de teste desta parte do problema estão organizados em três grupos:

Grupo Número de Pontos Restrições adicionais
1 10 N ≤ 1   000
2 20 L = R
3 20
-

Parte II

Determina o tamanho do maior conjunto possível de intervalos suspeitos disjuntos.

Exemplo

Se N = 6, L = 2, R = 3 e tivermos os seguintes lucros:

Então o seguinte conjunto tem 2 intervalos suspeitos disjuntos: {(1, 2), (4, 5)}. Há outros conjuntos possíveis com 2 intervalos suspeitos disjuntos, mas não há nenhum com mais de 2, logo 2 é a resposta para este caso.

Restrições:

São garantidos os seguintes limites em todos os casos de teste desta parte que irão ser colocados ao programa:

1 ≤ N ≤ 100 000 Número de dias
1 ≤ L ≤ R ≤ 1 000 000 Intervalos suspeitos
-1 000 000 ≤ Si ≤ 1 000 000 Valores de lucro

Os casos de teste desta parte do problema estão organizados em três grupos:

Grupo Número de Pontos Restrições adicionais
4 10 N ≤ 1   000
5 20 L = R
6 20
-

Sumário de subtarefas

Os casos de teste do problema estão organizados em 3 grupos com restrições adicionais diferentes:

Grupo Número de Pontos Parte Restrições adicionais
1 10 Parte I N ≤ 1   000
2 20 Parte I L = R
3 20 Parte I
-
4 10 Parte II N ≤ 1   000
5 20 Parte II L = R
6 20 Parte II
-

Input

A primeira linha contém um inteiro P, que representa a parte que o caso de teste representa. Se for 1, então o caso de teste refere-se à Parte I, se for 2 então refere-se à Parte II.

Segue-se uma linha com três inteiros separados por espaços, primeiro N, representando o número de dias, seguido de L e R, os valores para intervalos suspeitos.

Segue-se uma linha, contendo N inteiros separados por espaços, representando os valores de S.

Output

Parte I

O output deve conter uma única linha com um inteiro, o número de intervalos suspeitos.

Nota: Este valor pode ser superior a 232.

Parte II

O output deve conter uma única linha com um inteiro, o tamanho do maior conjunto de intervalos suspeitos disjuntos.

Input do Exemplo 1

1
6 2 3
1 1 -5 1 2 1

Output do Exemplo 1

4

Explicação do Exemplo 1

Este exemplo corresponde ao exemplo mencionado na Parte I do enunciado.

Input do Exemplo 2

2
6 2 3
1 1 -5 1 2 1

Output do Exemplo 2

2

Explicação do Exemplo 2

Este exemplo corresponde ao exemplo mencionado na Parte II do enunciado.


Final Nacional das ONI'2022
Departamento de Ciência de Computadores
Faculdade de Ciências da Universidade do Porto
(14 de Maio de 2022)