Cod sursa(job #2937050)

Utilizator lucametehauDart Monkey lucametehau Data 9 noiembrie 2022 19:38:30
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <cstring>
#include <chrono>
#include <cassert>
#include <bitset>
#include <stack>
#include <queue>
#include <iomanip>
#include <random>
#include <string>

#ifdef _MSC_VER
#  include <intrin.h>
#  define __builtin_popcount __popcnt
#  define __builtin_popcountll __popcnt64
#endif

#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define x first
#define y second
#define ld long double
#define ll long long
#define ull unsigned long long
#define us unsigned short
#define lsb(x) ((x) & (-(x)))
#define pii pair <int, int>
#define pll pair <ll, ll>

using namespace std;

mt19937_64 gen(time(0));
uniform_int_distribution <int64_t> rng;

const int MOD = 998244353;

ifstream in("algsort.in");
ofstream out("algsort.out");

int n;

int v[500005];

void solve(int test) {
    in >> n;

    for (int i = 1; i <= n; i++)
        in >> v[i];

    for (int j = n; j >= 1; j--) {
        int c = j;
        while (c % 2 == 0)
            c /= 2;
        while (c % 3 == 0)
            c /= 3;

        if (c != 1)
            continue;

        for (int i = j + 1; i <= n; i++) {
            int c = v[i], k;

            for (k = i; k > j && v[k - j] > c; k -= j) {
                v[k] = v[k - j];
            }

            v[k] = c;
        }
    }

    for (int i = 1; i <= n; i++)
        out << v[i] << " ";
    out << "\n";
}

int main() {
    srand(time(0));

    int T = 1;
    //in >> T;

    for (int t = 1; t <= T; t++) {
        solve(t);
    }

    return 0;
}