Integrate the zero-order interpolation of the data:
f[x_] = Integrate[Interpolation[dat, InterpolationOrder -> 0][x], x]; Plot[f[x], {x, 0, 110}, AspectRatio -> Automatic, GridLines -> {{18, 70, 90}, None}] 
It can efficiently plot piecewise functions with thousands of transition points in milliseconds:
dat = {Accumulate@RandomReal[{0, 1}, 1000], RandomReal[{-1, 1}, 1000]}\[Transpose]; f[x_] = Integrate[Interpolation[dat, InterpolationOrder -> 0][x], x]; Timing@Plot[f[x], {x, list1[[1]]dat[[1, list1[[1]], dat[[-1, 1]]}] 