Cod sursa(job #2160961)

Utilizator alxcl12Albu Alexandru alxcl12 Data 11 martie 2018 14:51:17
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <vector>
#include <algorithm>

std::ifstream f("permutari.in");
std::ofstream g("permutari.out");

using namespace std;

int a[100010];
int b[100010];
int n;
int nr1,nr2;

void citire()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>a[i];
}

void interclas(int p,int q,int m, int &u)
{
    int i=p;
    int j=m+1;
    int k=1;
    while(i<=m and j<=q)
    {
        if(a[i]<a[j])
        {
            b[k]=a[i]; k++; i++;
        }
        else if(a[i]>a[j])
        {
            b[k]=a[j]; k++; j++;
            u+=m-i+1;
        }
        else
        {
            b[k]=a[j]; k++; j++;
            b[k]=a[i]; k++; i++;
        }
    }
    while(i<=m)
    {
        b[k]=a[i];
        k++;
        i++;
    }
    while(j<=q)
    {
        b[k]=a[j];
        k++;
        j++;
    }
    for(int h=1,u=p;u<=q;h++,u++)
        a[u]=b[h];
}

void mergesort(int p, int q)
{
    if(p<q)
    {
        int m=(p+q)/2;
        mergesort(p,m);
        mergesort(m+1,q);
        /*for(int i=p;i<=m;i++)
            g<<a[i]<<' ';
        g<<' ';

        for(int j=m+1;j<=q;j++)
            g<<a[j]<<' ';
        g<<'\n';
*/
        interclas(p,q,m,nr1);

    }
}

vector <int> v;
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        v.push_back(i);

    do
    {
        for(int j=0;j<n;j++)
            g<<v[j]<<' ';
        g<<'\n';
    }while(next_permutation(v.begin(),v.end()));

    return 0;
}