program fun
implicit none
integer, allocatable :: p(:)
integer i, pos, half
p = [ 10, 12, 14, 16, 18 ]
do i = 1, 3
pos = maxloc( p, 1 )
half = p(pos) / 2
p = [ p(:pos-1), p(pos) - half, half, p(pos+1:) ]
write( *, "( *( i0, 1x ) )" ) p
end do
end program fun