Montagne Russe un caso errato

Sto cercando di completare il problema Montagne Russe ma c’è solo un caso nel subtask 3 che mi da errato (subcase 011).
Il codice è questo:

#include <stdio.h>
#include<iostream>
#include <assert.h>

#define MAXN 100000

int test(int n, int h[]) {
    bool incidente=false;
    bool salita=false;
    int cima=h[0], i=0, j;
	for(i=0; i<n-1&&!incidente; i++){
    	if(h[i]<=h[i+1]){
    		salita=true;
    		int diff=h[i+1]-h[i];
    		if(diff==h[i+2]-h[i+1] && diff!=0 && i<n-2){
    			for(j=i+2; diff==h[j+1]-h[j] && j<n-1; ){
    				j++;
				}
				i=j;
				cima=h[i];
				if(h[i+1]>=h[i] && i<n-1){
					incidente=true;
				}
			}else if(h[i+1]>=cima){
				incidente=true;
			}
			
	    }else{
	    	if(salita==true){
	    		salita=false;
				cima=h[i-1];
		    }
		}
	}
	if(incidente==false && i!=n)
	    return i;
    return i-1;
}


 int H[MAXN];

int main() {
    FILE *fr, *fw;
    int N, i;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &N));
    for(i=0; i<N; i++)
        assert(1 == fscanf(fr, "%d", &H[i]));

    fprintf(fw, "%d\n", test(N, H));
    fclose(fr);
    fclose(fw);
    return 0;
}

ho usato il template