Cod sursa(job #2636570)

Utilizator bigmixerVictor Purice bigmixer Data 18 iulie 2020 18:25:10
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(a) (a).begin(), (a).end()
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define sz() size()
#define fr first
#define sc second
#define int long long
#define mp make_pair
#define rc(s) return cout<<s,0
#define rcc(s) cout<<s,exit(0)
using namespace std;

const int nmax = 500005;

int n,a[nmax];

void sorting(int l,int r){
    if(l == r){
        // nu facem nimic
    }
    else{
        int mid = l+(r-l)/2;
        sorting(l,mid);
        sorting(mid+1,r);
        int le = l;
        int ri = mid + 1;
        vector<int>tz;
        while(le <= mid || ri <= r){
            if(le == mid + 1){
                tz.push_back(a[ri]);
                ++ri;
            }
            else if(ri == r + 1){
                tz.push_back(a[le]);
                ++le;
            }
            else{
                if(a[le] < a[ri]){
                    tz.push_back(a[le]);
                    ++le;
                }
                else{
                    tz.push_back(a[ri]);
                    ++ri;
                }
            }
        }
        for(int i=0;i<(int)tz.size();i++){
            a[l + i] = tz[i];
        }
    }
}

int32_t main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
    srand(chrono::steady_clock::now().time_since_epoch().count());
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    cin >> n;
    for(int i=1;i<=n;i++) cin >> a[i];
    sorting(1,n);
    for(int i=1;i<=n;i++){
        cout << a[i] << ' ';
    }
}