Предлагается хранить типы блоков в массиве. Каждый элемент - 2Б, количество элементов - 2^20 => всего требуется 2МБ.
При перезаписи блока и очередной переоценке необходимо учитывать типы данных в блоке до перезаписи (T0), после перезаписи (T1) и в соседних блоках (TL, TR).
Если T0 = T1, то количество кусков данных не изменяется, т.е. W[i+1] = W[i] TL = T0 = TR <> T1 -> W[i+1] = W[i] + 2 TL = T1 = TR <> T0 -> W[i+1] = W[i] - 2 TL = TR, T0 <> TL, T1 <> TL -> W[i+1] = W[i]
Если все четыре типа не совпадают, то W[i+1] = W[i] Если перезаписывается блок с адресом 0, считать, что тип TL не совпадает ни с одним из трех других.Аналогично при перезаписи блока с адресом , но для TR.
// PascalABC.NET 3.1, сборка 1198 от 11.03.2016 begin var n:=5; var z:=MatrixRandom(n,n,10,99); for var i:=0 to n-1 do begin for var j:=0 to n-1 do Print(z[i,j]); Writeln end; var imin:=0; var jmin:=n-1; for var i:=1 to n-1 do if z[i,n-i-1]<z[imin,jmin] then begin imin:=i; jmin:=n-i-1 end; Writeln('Zmin=Z[',imin+1,',',jmin+1,']=',z[imin,jmin]) end.
Ну True это правда,а false это ложь