Transações encaixadas
Time limit: 3000 msMemory limit: 256 MB
Um banco de dados associa chaves inteiras a valores inteiros. Inicialmente, nenhuma chave existe. Execute os comandos abaixo:
SET k v: cria a chave ou substitui seu valor por .DEL k: remove a chave , se ela existir.GET k: consulta o valor atual de .BEGIN: abre uma transação dentro da transação atual, se houver uma.COMMIT: encerra a transação aberta mais recentemente, mantendo suas alterações. Se houver uma transação externa, essas alterações continuam pertencendo a ela e ainda podem ser desfeitas por seuROLLBACK.ROLLBACK: desfaz todas as alterações feitas desde oBEGINcorrespondente e encerra essa transação, inclusive desfazendo alterações de transações internas já confirmadas.
As consultas enxergam imediatamente as alterações, mesmo dentro de transações ainda abertas. Comandos fora de transações alteram diretamente o banco. Cada COMMIT ou ROLLBACK tem uma transação aberta correspondente, e todas as transações estão encerradas ao final.
Input
A primeira linha contém (). As próximas linhas contêm um comando cada, no formato acima.
Em todos os comandos, e .
Output
Para cada GET, imprima o valor atual da chave, ou NULL se ela não existir.
Samples
Sample 1
Input
11 SET 1 10 BEGIN SET 1 20 BEGIN DEL 1 GET 1 COMMIT GET 1 ROLLBACK GET 1 GET 2
Output
NULL NULL 10 NULL
O COMMIT interno mantém a remoção, mas o ROLLBACK externo restaura o valor 10.