Paletta numero di swap sbagliato

Ciao, sto cercando di risolvere il prolema paletta. Riesco facilmente a capire quando un array non è ordinabile ma non riesco comunque a prendere molti punti perchè in alcune subtask il codice sbaglia il numero di swap necessari. Per ora riesco solo a fare 40.8/100. Qualcuno sa’ dove stò sbagliando? Codice:

int arr[1500000];

int ex(int n) {

    std::vector<std::pair<int, int>> g(n);
    for (int i = 0; i < n; i++) {
        g[i].first = arr[i];
        g[i].second = i;
    }

    sort(g.begin(), g.end());

    int ans = 0;
    int x = 0;
    while (x < n)
    {
        if (g[x].second == x || g[x].first == arr[x])
        {
            x++;
            continue;
        }
        else
        {
            int y = 0;
            while ((g[x].second != x && g[x].first != arr[x]))
            {
                std::swap(g[x].first, g[g[x].second].first);
                std::swap(g[x].second, g[g[x].second].second);
                y++;
            }
            if (y > 0)
                ans += (y);
            x++;
        }
    }
    return ans;
}

long long paletta_sort(int N, int V[]) {

    for (int i = 1; i < N; i++) {
        if (i % 2 != V[i] % 2) return -1;
    }

    long long ans = 0;


    for (int i = 0; i < N; i += 2) {
        arr[i / 2] = V[i] / 2;
    }
    ans += ex((N + 1) / 2);

    for (int i = 1; i < N; i += 2) {
        arr[(i - 1) / 2] = (V[i] - 1) / 2;
    }
    ans += ex(N / 2);

    return ans;

}

Edit: Ho trovato il problema. La mia soluzione cercava il numero di swap necessari per ordinare l’array ma invece avrebbe dovuto cercare il numero di swap adiacenti necessari per ordinare l’array. Ho cambiato il codice e ora prendo 100/100