CCCPaste

Untitled

#include 
#include 
#include 
#include 
#include 
using namespace std;
 
int main()
{
    int n, l;
    cin >> n >> l;
    pair p[n];
    for(int i = 0; i < n; i++) {
        cin >> p[i].second >> p[i].first;
    }
    
    int L = 0;
        int R = l;
        int zalepeni = 0;
    for(int i = 0; i < n; i++) {
            int a = p[i].second;
            int b = p[i].first;
            if(R < a) {
                continue;
            }
            if(b < L) {
                continue;
            }
            if(a < L and R < b) {
                continue;
            }
            if(L <= a and b <= R) {
                zalepeni += 1;
                continue;
            }
            if(a < L) {
                int strci = L - a;
                if(strci < 0) {
                    strci *= -1; // dolzinata mora da e pozitiven broj
                }
                int dolzina = b - a;
                if(dolzina < 0) {
                    dolzina *= -1;
                }
                if(strci <= dolzina / 2) {
                    L = a;
                    zalepeni += 1;
                }
            }
            else if(R < b) {
                int strci = b - R;
                if(strci < 0) {
                    strci *= -1;
                }
                int dolzina = b - a;
                if(dolzina < 0) {
                    dolzina *= -1;
                }
                if(strci <= dolzina / 2) {
                    R = b;
                    zalepeni += 1;
                }
            }
        }
    int zalepeni2 = 0;
    sort(p, p + n);
    for(int i = n - 1; i >= 0; i--) {
            int a = p[i].second;
            int b = p[i].first;
            if(R < a) {
                continue;
            }
            if(b < L) {
                continue;
            }
            if(a < L and R < b) {
                continue;
            }
            if(L <= a and b <= R) {
                zalepeni2 += 1;
                continue;
            }
            if(a < L) {
                int strci = L - a;
                if(strci < 0) {
                    strci *= -1; // dolzinata mora da e pozitiven broj
                }
                int dolzina = b - a;
                if(dolzina < 0) {
                    dolzina *= -1;
                }
                if(strci <= dolzina / 2) {
                    L = a;
                    zalepeni2 += 1;
                }
            }
            else if(R < b) {
                int strci = b - R;
                if(strci < 0) {
                    strci *= -1;
                }
                int dolzina = b - a;
                if(dolzina < 0) {
                    dolzina *= -1;
                }
                if(strci <= dolzina / 2) {
                    R = b;
                    zalepeni2 += 1;
                }
            }
        }
    int zalepeni3 = 0;
    for(int i = 0; i < n; i++) {
            int a = p[i].second;
            int b = p[i].first;
            if(R < a) {
                continue;
            }
            if(b < L) {
                continue;
            }
            if(a < L and R < b) {
                continue;
            }
            if(L <= a and b <= R) {
                zalepeni3 += 1;
                continue;
            }
            if(a < L) {
                int strci = L - a;
                if(strci < 0) {
                    strci *= -1; // dolzinata mora da e pozitiven broj
                }
                int dolzina = b - a;
                if(dolzina < 0) {
                    dolzina *= -1;
                }
                if(strci <= dolzina / 2) {
                    L = a;
                    zalepeni3 += 1;
                }
            }
            else if(R < b) {
                int strci = b - R;
                if(strci < 0) {
                    strci *= -1;
                }
                int dolzina = b - a;
                if(dolzina < 0) {
                    dolzina *= -1;
                }
                if(strci <= dolzina / 2) {
                    R = b;
                    zalepeni3 += 1;
                }
            }
        }
    
    cout << max(max(zalepeni, zalepeni2), zalepeni3) << endl;
    return 0;
}
/*
 7 5
     
 2 4
-3 3
 
 
 
 7 10
 1 8
 6 7
 6 7
 -1 6
 2 4
 -3 3
 
 **/