Cod sursa(job #3339993)

Utilizator Sorin123-21Enachioiu Sorin-Catalin Sorin123-21 Data 11 februarie 2026 14:14:58
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
// https://www.infoarena.ro/problema/algsort

#include <bits/stdc++.h>

using namespace std;

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

int main() {
    int N; in >> N;
    vector<int> v(N); 

    for (int i = 0; i < N; i++) in >> v[i];

    auto merge_range = [](vector<int>& v, int l, int mid, int r) {
        vector<int> tmp;
        tmp.reserve(r - l + 1);
        int i = l, 
            j = mid+1; 

        while(i <= mid && j <= r) {
            if(v[i] <= v[j]) 
                tmp.push_back(v[i++]);
            else 
                tmp.push_back(v[j++]);
        }

        while (i <= mid) tmp.push_back(v[i++]);
        while (j <= r)   tmp.push_back(v[j++]);

        for(int k = 0; k < tmp.size(); k++) 
            v[l + k] = tmp[k]; 
    };

    auto merge_sort_rec = [N, merge_range](auto self, vector<int>& v, int l, int r) {
        if(l == r) return;

        int mid = floor((l + r) / 2); // l + (r - l) / 2;

        self(self, v, l      , mid);
        self(self, v, mid + 1, r  );

        merge_range(v, l, mid, r);
    };

    auto merge_sort = [merge_sort_rec](vector<int>& v) {
        if (v.empty()) return;
        merge_sort_rec(merge_sort_rec, v, 0, (int)v.size() - 1);
    };

    merge_sort(v);

    for(int i = 0; i < N; i++) out << v[i] << " ";


    return 0;
}