With a TikZ matrix, I leave it to you to set the colors you like:
\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{fit}
\usetikzlibrary{backgrounds}
\tikzset{
mymatr/.style={
matrix of nodes,
nodes in empty cells,
nodes={
draw,
inner sep = 0pt,
minimum size=14pt,
font=\bfseries
},
column sep=-\pgflinewidth
},
myarrow/.style={
line width=2.5pt,
-{Straight Barb[length=7pt,width=9pt]},
},
mysegm/.style={
line width=3pt,
shorten >=-6pt,
shorten <=-6pt
}
}
\begin{document}
\begin{figure}\centering
\begin{tikzpicture}
\matrix[mymatr] (M) {
1&1&0&0&0&1&0&0&0&1&0&0&0&1&0&0&1&0&1&1&0&1&1&1\\[25pt]
1&1&1&0&0&0&1&0&0&0&0&1&0&1&1&0&1&1&1&1&0&0&1&0\\[50pt]
1&1&0&0&0&0&1&0&0&0&0&1&0&1&0&0&1&0&1&1&0&0&1&0\\[25pt]
1&1&1&0&0&1&0&0&0&1&0&0&0&1&1&0&1&1&1&1&0&1&1&1\\
};
% background colors
\scoped[on background layer]
{% first row
\node[inner sep = 0pt, fill=blue!10, fit=(M-1-1)(M-1-9)] {} ;
\node[inner sep = 0pt, fill=blue!20, fit=(M-1-10)(M-1-16)] {};
\node[inner sep = 0pt, fill=purple!10, fit=(M-1-17)(M-1-24)] {};
% second row
\node[inner sep = 0pt, fill=cyan!50, fit=(M-2-1)(M-2-9)] {} ;
\node[inner sep = 0pt, fill=green!50, fit=(M-2-10)(M-2-16)] {};
\node[inner sep = 0pt, fill=orange!50, fit=(M-2-17)(M-2-24)] {};
% third row
\node[inner sep = 0pt, fill=blue!10, fit=(M-3-1)(M-3-3)] {} ;
\node[inner sep = 0pt, fill=cyan!50, fit=(M-3-4)(M-3-9)] {} ;
\node[inner sep = 0pt, fill=green!50, fit=(M-3-10)(M-3-13)] {};
\node[inner sep = 0pt, fill=blue!20, fit=(M-3-14)(M-3-16)] {};
\node[inner sep = 0pt, fill=purple!10, fit=(M-3-17)(M-3-20)] {};
\node[inner sep = 0pt, fill=orange!50, fit=(M-3-21)(M-3-24)] {};
% fourth row
\node[inner sep = 0pt, fill=cyan!50, fit=(M-4-1)(M-4-3)] {} ;
\node[inner sep = 0pt, fill=blue!10, fit=(M-4-4)(M-4-9)] {} ;
\node[inner sep = 0pt, fill=blue!20, fit=(M-4-10)(M-4-13)] {};
\node[inner sep = 0pt, fill=green!50, fit=(M-4-14)(M-4-16)] {};
\node[inner sep = 0pt, fill=orange!50, fit=(M-4-17)(M-4-20)] {};
\node[inner sep = 0pt, fill=purple!10, fit=(M-4-21)(M-4-24)] {};
}
% arrows
\draw[myarrow, blue] (M-1-1) -- ++(-1.5,0) |- (M-3-1);
\draw[myarrow, orange] (M-2-1) -- ++(-1,0) |- (M-4-1);
\draw[myarrow, blue] (M-1-24) -- ++(1.5,0) |- (M-4-24);
\draw[myarrow, orange] (M-2-24) -- ++(1,0) |- (M-3-24);
\draw[myarrow, orange] (M-2-8) -- (M-3-8);
\draw[myarrow, blue] ([xshift=4pt]M-1-10.south) -- ([xshift=4pt]M-4-10.north);
\draw[myarrow, blue] ([xshift=4pt]M-1-17.south) -- ([xshift=4pt]M-3-17.north);
\draw[myarrow, orange] ([xshift=4pt]M-2-18.south) -- ([xshift=4pt]M-4-18.north);
% black segments
\draw[mysegm](M-1-3.north east)--(M-2-3.south east);
\draw[mysegm](M-1-13.north east)--(M-2-13.south east);
\draw[mysegm](M-1-20.north east)--(M-2-20.south east);
\end{tikzpicture}
\end{figure}
\end{document}
