Cod sursa(job #3362960)

Utilizator anavintilaAna Vintila anavintila Data 13 august 2026 10:53:14
Problema Generare de permutari Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector <int> v;

bool negzt_permutation(int start, int enduh) {

    int s = enduh-start+1;
    vector <int> v_sortat(s), v_nou(s);
    for (int i = 0;i<enduh-start+1;i++) {

        v_nou[i] = v[i+start];
    }
    sort(v_nou.begin(), v_nou.end(), greater<int>());

    for (int i = 0;i<(int)v_nou.size();i++) {

        v_sortat[i] = v_nou[i];
    }
    bool ok = true;
    for (int i = 0;i<s;i++) {

        if (v[i+start] != v_sortat[i]) {

            ok = false;
            break;
        }
    }

    if (ok) {

        sort(v.begin()+start, v.begin()+enduh+1);
        return false;
    }
    int i = enduh;
    while (i > start && v[i] < v[i-1]) {

        i--;
    }
    int poz = i-1;
    int st = poz+1, dr = enduh, rez = poz+1;

    while (st <= dr) {

        int mij = (dr+st)/2;

        if (v[mij] <= v[poz]) {

            dr = mij-1;
        }
        else {

            st = mij+1;
            rez = mij;
        }
    }
    int aux = v[rez];
    v[rez] = v[poz];
    v[poz] = aux;

    sort(v.begin()+poz+1, v.begin()+enduh+1);
    return true;
}

int main()
{
    int n;
    cin>>n;

    v.resize(n);

    for (int i = 0;i<n;i++) {

        v[i] = i+1;
        cout<<v[i]<<" ";
    }
    cout<<'\n';
    while (negzt_permutation(0, n-1)) {

        for (auto x : v) {

            cout<<x <<" ";
        }
        cout<<'\n';
    }
    return 0;
}