Lumberjacks - 0/100

Salve stavo provando a risolvere il problema ma temo mi stia sfuggendo qualche edge case, sono consapevole del fatto che la mia soluzione sia naive ma non capisco come mai dia tutti i test case corretti al subtask 2 apparte il n.3

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

int cuts(vector<pair<int, int>> A, int N)
{
    sort(A.begin(), A.end(), [&] (pair<int, int> a, pair<int, int> b) {
        if (a.second == b.second) return a.first > b.first;
        else return a.second < b.second;
    });

    int safe = N;
    vector<bool> cut(N, 0);
    for (auto [x, c] : A)
    {
        if (cut[(x + N - 1) % N]) continue;
        // cout << x << " " << c << endl;
        cut[x] = 1;
        safe--;
    }

    return safe;
}

int main() 
{
    ifstream cin("input.txt");
    ofstream cout("output.txt");

    int N, Q;
    cin >> N >> Q;

    vector<pair<int, int>> A(N);
    for (int i = 0; i < N; ++i)
    {
        int a; cin >> a;
        A[i] = {i, a};
    }

    vector<int> X(Q), C(Q);
    for (int i = 0; i < Q; ++i)
        cin >> X[i] >> C[i];

    cout << cuts(A, N) << " ";
    for (int i = 0; i < Q; ++i)
    {
        A[X[i]] = {X[i], C[i]};
        cout << cuts(A, N) << " ";
    }
}