Orphaned (non referenced) blocks list
As a result I've got 2 arrays: block hashes (array A) and parent references (array B). Then if I subtract B from A, I would get a list of orphaned blocks.


No, doing that will get you a list of stale blocks (which are commonly referred to as orphaned blocks). What you are doing is getting all blocks which are not parents of anything, not blocks which do not have parents.


000000000000000003D57B69D1AC77F64287C893C16ADBC1816C6D7386CCC3C0 – orphaned 



The term "orphaned" here means that the block does not have any children. This is the second meaning of the term "orphaned block". This result is expected since you are removing from your list of block hashes the list of parent blocks, and this block is not a parent.


0000000000000000011523D7477DD274B7E0DCC2C616B2E2F584FFDEC20237D3 - main chain



This block is in the main chain. It is probably in your list because that is what your node was synced up to and this was its most recent block.