Solução escrita por Caique Paiva
Conhecimento prévio necessário:
A ideia principal é a seguinte: Se um quadrado (i, j) é uma joia, então, quantas quadruplas existem, com esse
fixo? A resposta é a quantidade de
na linha
depois de
vezes a quandidade de
na coluna
depois de
. Por exemplo, para
no exemplo abaixo, temos
na linha
depois de
, e temos
na coluna
depois de
, então, a resposta para essa quadrupla é
.
Então, sendo a resposta dessa pergunta para o par
, a resposta do problema vai ser a soma de todas essas respostas. Portanto, podemos calcular essa soma de valores em
, então, se conseguirmos responder essa pergunta em
, o problema está resolvido, e nós conseguimos responder essa pergunta em
com uma prefix sum! Seja
um vetor que, na posição
,
guarda a quantidade de
na linha
depois de
. Veja que
e que
(Se
é
). Então, conseguimos calcular esse valor em
. Para fazer a prefix sum das colunas
, é análogo.
Recomendamos que você tente implementar o problema antes de ver o código. Veja a implementação nesse link.