1783 - Find Min
Cerința
Se dă un șir P de lungime N cu elemente distincte din mulțimea {1,2..,N}. Pentru fiecare poziție i din șirul P se cere să aflați cea mai mică poziție j, astfel încât P[j] < P[i] și j < i. În caz că o astfel de poziție nu există se consideră -1 ca soluție.
Date de intrare
Fișierul de intrare findmin.in conţine pe prima linie N, reprezentând lungimea șirului iar pe a doua linie N numere naturale, reprezentând elementele șirului P.
Date de ieșire
Fișierul de ieșire findmin.out va conține pe prima linie N numere despărțite prin câte un spațiu, unde al i-lea număr reprezintă răspunsul pentru al i-lea element din șir.
Restricții și precizări
1 ≤ N ≤ 1 000 000
- Șirul
Peste indexat de la1.
Exemplu 1
- Intrare
- 7
- 5 6 7 3 1 4 2
- Ieșire
- -1 1 1 -1 -1 4 5
Explicație
Pentru primele 2 elemente răspunsurile sunt -1 respectiv 1. Pentru al 3-lea element răspunsul e poziția 1(se observă că și P[2] < P[3]). Pentru elementele de pe pozițiile 4 și 5 răspunsurile sunt: -1 și -1. Răspunsul pentru al 6-lea element: poziția 4 (se observa că și P[5] < P[6]). În final, răspunsul pentru ultimul elementul: poziția 5.
Exemplu 2
- Intrare
- 1000001
- 1 2 3 3 3
- Ieșire
- Date de intrare gresite!
Rezolvare
<syntaxhighlight lang="python" line="1">
- 1783 Find Min
def conditii(n, sir_p):
restrictii = (
1 <= min(sir_p),
max(sir_p) <= 1_000_000,
1 <= n <= 1_000_000,
len(sir_p) == n
)
return all(restrictii)
def gasire_min(numere):
sir = []
for i in range(len(numere)):
minim = 1_000_001
for j in range(i):
if numere[j] < numere[i]:
if numere[j] < minim:
minim = j
sir.append(f"{minim+1 if minim != 1_000_001 else -1}")
return " ".join(sir)
def main():
n = int(input())
sir_p = [int(x) for x in input().split()]
if not conditii(n, sir_p):
return print("Date de intrare gresite!")
print(gasire_min(sir_p))
if __name__ == "__main__":
main()
</syntaxhighlight>