█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 5419

Problema 0xde - Ordenar un arreglo grande

  • Autor: slash
  • Fecha: 2021-12-16 00:15:49 UTC (Hace alrededor de 3 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.001 s 0 KBi
#2
Correcto
0.003 s 0 KBi
#3
Correcto
0.002 s 0 KBi
#4
Correcto
0.007 s 0 KBi
#5
Correcto
0.005 s 3 KBi
#6
Correcto
0.002 s 0 KBi
#7
Tiempo límite excedido
1.07 s 1 KBi
#8
Tiempo límite excedido
1.055 s 2 KBi
#9
Tiempo límite excedido
1.096 s 1 KBi
#10
Tiempo límite excedido
1.089 s 2 KBi
#11
Tiempo límite excedido
1.1 s 1 KBi
#12
Tiempo límite excedido
1.035 s 1 KBi
#13
Correcto
0.017 s 1 KBi
#14
Correcto
0.053 s 1 KBi
#15
Correcto
0.079 s 1 KBi
#16
Correcto
0.061 s 2 KBi
#17
Correcto
0.023 s 2 KBi
#18
Correcto
0.017 s 1 KBi
#19
Correcto
0.017 s 1 KBi
#20
Tiempo límite excedido
1.068 s 19 KBi
#21
Correcto
0.054 s 4 KBi
#22
Correcto
0.057 s 1 KBi
#23
Correcto
0.058 s 1 KBi
#24
Correcto
0.065 s 1 KBi
#25
Correcto
0.02 s 1 KBi
#26
Correcto
0.021 s 1 KBi
#27
Correcto
0.021 s 1 KBi
Puntos totales: 75 / 100

Código

//
// Created by danie on 12/11/2021.
//

#include "iostream"
#include "random"
#include "ctime"

#define fast_io ios_base::sync_with_stdio(false); cin.tie(NULL);
#define rand mt19937

using namespace std;

mt19937 rand_gen;

void swap(int &a, int &b){
//    a = b + a;
//    b = a - b;
//    a = a - b;
    int temp = b;
    b = a;
    a = temp;
}

int partition(vector<int> &cards, int from, int to){
    int x = cards[to];
//    cout<<x<<' ';
    int i = from;
    for (int j = from; j < to; j++){
        if (cards[j] <= x){
            swap(cards[i++], cards[j]);
//            i++;
        }
    }
    swap(cards[i], cards[to]);
    return i;
}

void quicksort(vector<int> &cards, int from, int to){
    if (to > from){
        int part = partition(cards, from, to);
        quicksort(cards,from, part  -1);
        quicksort(cards, part + 1, to);
    }
}

int randomized_partition(vector<int> &cards, int from, int to){
//    int k = rand();

    int i =  (rand_gen() % (to - from)) + from;
    swap(cards[to], cards[i]);
    return partition(cards,from,to);
}

int randomized_select(vector<int> &cards, int from, int to, int ith){ // este es el bueno
    if(to == from) return cards[from];
    int ordered_item = randomized_partition(cards, from, to);
    int distance = ordered_item - from;
    if (ith == ordered_item) return cards[ordered_item];
    if (ith < ordered_item) return randomized_select(cards, from, ordered_item - 1, ith);
    return randomized_select(cards, ordered_item + 1, to, ith);
}

//int randomized_select(vector<int> &cards, int from, int to, int ith){
//    if(to == from) return cards[from];
//    int ordered_item = randomized_partition(cards, from, to);
//    int elements_on_left_array = (ordered_item - from) ;
//    if (ith == elements_on_left_array) return cards[ordered_item];
//    if (ith < ordered_item) return randomized_select(cards, from, ordered_item - 1, ith);
//    return randomized_select(cards, ordered_item + 1, to, ith - elements_on_left_array);
//}

void randomized_quicksort(vector<int> &cards,int from,int to){
    if (to > from){
        int part = randomized_partition(cards, from, to);
        randomized_quicksort(cards,from, part - 1);
        randomized_quicksort(cards, part + 1, to);
    }
}

//void tests(){
//    vector<int> cards = {25,45,38,19,9,4,14}; // 0 1 3 5 5 7 7 8 sorted
//
//    quicksort(cards,0,cards.size() - 1);
////    for(int card:cards)cout<<card<<' ';
//
////    cout<<'\n'<<randomized_select(copy_cards,0,cards.size() - 1, 7)<<'\n';
////    for(int card:copy_cards)cout<<card<<' ';
//
//
//}

int main(){
    fast_io
    int n; cin>>n;
    vector<int> numbers;
    for(int i = 0; i < n; i++) {
        int in; cin>>in;
        numbers.push_back(in);
    }
    randomized_quicksort(numbers,0,n - 1);
    for (int num: numbers) cout<<num<<' ';
}