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}]

![enter image description here][1]

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, dat[[1, 1]], dat[[-1, 1]]}]

![enter image description here][2]


 [1]: https://i.sstatic.net/hZn8Y.png
 [2]: https://i.sstatic.net/eSYo3.png
 [3]: https://i.sstatic.net/hi6ii.png