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) << " ";
}
}