Do not duplicate posts with multiple categories in multiple loops

You are adding post IDs to $do_not_duplicate, but you are missing the other half of the process- excluding those post IDs from subsequent queries. You can do that by setting post__not_in with the array of IDs you don’t want returned.

$args = array(
    'posts_per_page' => 1,
    'paged' => $page,
    'cat' => 2,
    'post__not_in' => $do_not_duplicate,
);