Solução escrita por Levi Oliveira
Subtarefa $N,M,Q \leq 100$
Como os limites são pequenos, podemos simular a grade utilizando uma matriz cor, em que cor[i][j] armazena a cor da bolinha na posição $(i,j)$, ou $0$ se estiver vazia.
No comando c j k, percorremos a coluna $j$ de baixo para cima até encontrar uma posição vazia. Colocamos a bolinha nessa posição e imprimimos sua linha. Se a coluna estiver cheia, imprimimos $-1$.
No comando (l, i), percorremos a linha $i$ da esquerda para a direita e imprimimos a primeira coluna ocupada e sua cor. Se a linha estiver vazia, imprimimos $-1$.
No comando (p, i, j), consultamos diretamente cor[i][j] e imprimimos a cor ou $-1$ se a posição estiver vazia.
Cada comando custa $O(N+M)$ no pior caso. Portanto, a complexidade total é $O(Q(N+M))$, com espaço $O(NM)$.
Problema completo
Utilizamos um vetor de vetores $balls$, em que $balls[j]$ armazena as cores das bolinhas da coluna $j$, da mais baixa para a mais alta. Também mantemos um vetor line, que guarda a menor coluna ocupada de cada linha e a cor correspondente.
No comando (c, j, k) se a coluna estiver cheia, imprimimos $-1$. Caso contrário, inserimos a bolinha e calculamos sua linha pela fórmula
$$
i=N-\text{balls}[j].size()+1
$$
OBS: Tal fórmula vem pelo fato de que as linhas estão invertidas no vetor balls. A cor da bola da última linha esta no índice 0, a cor da penúltima está no índice 1, e assim por diante.
Atualizamos line[i] com a menor coluna ocupada e sua cor, e imprimimos $i$.
No comando (l, i), consultamos diretamente line[i]. Se a linha estiver vazia, imprimimos $-1$; caso contrário, imprimimos a coluna e a cor armazenadas.
No comando (p, i, j), acessamos o índice $N-i$ de balls[j]. Se esse índice não existir, imprimimos $-1$; caso contrário, imprimimos a cor da bolinha.
Assim, cada comando é processado em $O(1)$, resultando em complexidade temporal total $O(Q)$ e espaço $O(N+M+Q)$.
