Solution to the problem number 296 of AceptaelReto - 296.

Any questions do not hesitate to contact.


#include <bits/stdc++.h>
using namespace std;

struct intervalo{
    int start,end;
};
bool compare(intervalo a, intervalo b){
    if(a.start == b.start) return a.end>b.end;
    return a.start<b.start;
}
int main(){
    int C,F,N;
    while(scanf("%d %d %d",&C,&F,&N)==3 && (C!=0 || F!=0 ||N!=0)){
        int s,e;
        vector<intervalo> V;
        for(int i=0; i<N;i++){
            scanf("%d %d",&s,&e); V.push_back(intervalo{s,e});
        }
        sort(V.begin(),V.end(),compare);
        int res = 0;
        int curEnd = C, maximo=C;
        for(int i=0; i<N && curEnd<F;i++){
            if (V[i].start > curEnd) {
                curEnd = maximo; res++;
            }
            if (V[i].start <= curEnd && V[i].end > maximo)
                maximo = V[i].end;
        }
        if (curEnd >= F) printf("%d\n",res);
        else if (maximo >= F) printf("%d\n",res+1);
        else printf("Imposible\n");
    }
    return 0;
}

Don't miss anything.

Keep in touch with Isaac Lozano Osorio!