最長区間が複数の場合はiが小さい方を優先
#include <stdio.h>
#include <math.h>

const double eps = 1E-6;

int main()
{
double a[] = {5, 3, 12, 16, 13, 14, 20, 21, 18};
double h = 3.1;
int len = sizeof(a)/sizeof(double);
int s = 0, e = 0;
int i = 0, j;
for(j=1;j<len;j++) {
if(fabs(a[j]-a[i]) < h)
continue;
if(j-1-i > e-s) {
s = i;
e = j-1;
}
while(fabs(a[++i]-a[j]) - h >= -eps);
}
if(j-1-i > e-s) {
s = i;
e = j-1;
}
printf("%d to %d", s, e);

return 0;
}