将楼主的代码稍微排了下版, 然后跑了几个测试样例都过了, 不清楚实际能不能 ac

#include <iostream>
#include <vector>
using namespace std;

int main() {

    int N, M;
    cin >> N >> M;
    vector<pair<int, int>> time(N);
    int s, t;
    for (int i = 0; i < N; i++) {
        cin >> s >> t;
        if (s >= t) t += M;
        time[i] = make_pair(s, t);
    }

    sort(time.begin(), time.end(), [](pair<int, int>& p1,
                                      pair<int, int>& p2) {
        return (p1.second == p2.second) ?
               p1.first > p2.first :
               p1.second < p2.second;
    });

    int bound = time[0].second;
    int max_watch = 0;

    for(int i = 0; i < N; i++) {
        // 我们需要找的不同的起点, 绝对是在第一个遍历的 end 之前,
        // 如果在起点在第一个遍历的 end 之后, 岂不是丢掉了 time 中第一个元素, 肯定不是最大值
        if (time[i].first >= bound) {
            break;
        }

        int start_time = time[i].first;
        int cur_time = time[i].second;
        int watch = 1;

        for (int j = i+1; j < N; j++) {
            if (time[j].first < cur_time) {
                continue;
            }
            cur_time = time[j].second;
            if (cur_time > start_time + M) {
                break;
            } else
                watch++;
        }
        max_watch = max(max_watch, watch);
    }
    cout << max_watch << endl;
    return 0;
}