while this is true for the example you show in Fig.1, not sure this is always the case. For example, in another case you can have something like this:
start with th=1, ih=256
the +1/3rd check fails a few times and interim headers are retrieved and checked, let's say: [1], 8, 16, 32, 64, 128, [256]
8 verifies against 1 so now we have th=8, ih=256
again the +1/3rd check fails and other headers are retrieved: [8], 16, 24, 40, 72, 136, [256]
16 verifies against 8 and at this point th=16, ih=256
-...
The downloaded headers are not kept around (so we save on memory) but more headers and vals need to be retrieved.