The Ever-Increasing Graph
R, 179 158 151 bytes
function(s,m){p=1;t=c(which(diff(s)<0),length(s));for(i in t){d=c(s[p]-m,s[(p+1):i],s[i+1]+m);if(p==1)d[1]=s[1];if(p==t[-1])d=head(d,-1);print(d);p=i}}
Try it online!
Edit: Code is now a function and takes input. (Thanks to Giuseppe, user202729 and JayCe for calmly pointing that out)
Edit: -21 bytes suggested by Giuseppe.
Edit: -7 bytes by removing d=NULL;
.
Python 2, 60 bytes
Input is N, followed by all points as individual arguments. Subsequences in the output are seperated by 0.5
.
f=lambda N,k,*l:(k,)+(l and(l[0]+N,.5,k-N)*(l[0]<k)+f(N,*l))
Try it online!
Python 2, 92 77 68 bytes
Subsequences are seperated by [...]
.
l,N=input();r=[];k=0
for a in l:r+=[a+N,r,k-N]*(a<k)+[a];k=a
print r
Try it online!
JavaScript (Node.js), 104 82 bytes
n=>a=>a.map((e,i)=>e>a[s.push(e),++i]&&s.push(a[r.push(s=[e-n]),i]+n),r=[s=[]])&&r
Try it online! Port of @ovs's Python answer.