Cod sursa(job #2449473)

Utilizator voyagerSachelarie Bogdan voyager Data 19 august 2019 21:09:04
Problema Statistici de ordine Scor 50
Compilator py Status done
Runda Arhiva educationala Marime 0.79 kb
#!/usr/bin/env python3

import random, sys
sys.stdout = open('sdo.out', 'w')

with open('sdo.in', 'r') as f:
    readInts = lambda: map(int, f.readline().split())

    N, K = tuple(readInts())
    v = list(readInts())
    K -= 1

    def partition(start, end):
        if start >= end - 1: return start

        p, k = random.randrange(start, end), start
        v[p], v[end - 1] = v[end - 1], v[p]
        while start < end - 1:
            if v[start] < v[end - 1]:
                v[start], v[k] = v[k], v[start]
                k += 1
            start += 1
        v[k], v[end - 1] = v[end - 1], v[k]
        return k

    l, r = 0, N
    while l <= r:
        k = partition(l, r)
        if k == K:
            break
        elif k > K:
            r = k
        else:
            l = k + 1
    print(v[K])