For tracking changes you may simply save individual changes for every element in array. In your example it would like this:
STATE 1: [1:3,2:4,3:5,4:6]
STATE 2: [5:4]
STATE 3: [1:1,2:-1]
It won't be space-efficient if there are lots of changes with every state update. But if more then half of the array stays the same, you will benefit.
Merkle Tree is used for verifying individual blocks of data(transactions) received from unknown or little-known sources. It is used in blockchain wallets or torrent clients. It is not used for storing arrays.