3225 - Simple
Enunt[edit | edit source]
Se dă un șir de N numere și Q operații de tipul:
- 0 a b val : se va aduna valoarea val la toate numerele din intervalul [a, b].
- 1 a b : se va afișa elementul minim par și elementul maxim impar din intervalul [a, b]; în cazul în care unul dintre aceste numere nu există, se va afișa -1 în locul său.
Cerinţa[edit | edit source]
Răspundeți corect la toate operațiile de tip 1.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul N. Pe a doua linie se vor afla N numere reprezentând elementele din sir. Pe linia a treia se va afla numărul Q, iar pe următoarele Q linii se vor afla Q operații sub forma descrisa în enunț.
Date de ieșire[edit | edit source]
Se vor afișa pe ecran răspunsurile la operațiile de tip 1, câte unul pe linie.
Restricţii şi precizări[edit | edit source]
- N, Q <= 200.000
- Numerele din sir sunt cuprinse intre 1 și 2.000.000.000.
- Valorile val din operațiile de tip 0 sunt cuprinse intre 1 și 2.000.000.000.
- ATENȚIE! În cazul în care unul din cele două răspunsuri la o operație de tip 1 nu poate fi calculat, se va afișa -1
Exemplu[edit | edit source]
- Intrare
7 5 6 3 1 9 8 5 10 1 2 5 0 2 3 2 1 2 4 0 2 7 3 1 2 4 1 4 7 0 5 7 1 1 1 6 1 1 2 1 3 4
- Ieșire
6 9 8 5 4 11 4 11 4 13 -1 11 4 -1
Explicație[edit | edit source]
Șirul inițial este: 5 6 3 1 9 8 5. Operația 1 2 5: Se vor afișa cele doua valori cerute pe intervalul [2; 5]. Operația 0 2 3 2: Șirul nou format va fi 5 8 5 1 9 8 5. Operația 1 2 4 : Se vor afișa cele doua valori cerute pe intervalul [2; 4]. Operația 0 2 7 3 : Șirul nou format va fi 5 11 8 4 12 11 8. Operația 1 2 4 : Se vor afișa cele doua valori cerute pe intervalul [2; 4]. Operația 1 4 7 : Se vor afișa cele doua valori cerute pe intervalul [4; 7]. Operația 0 5 7 1 : Șirul nou format va fi 5 11 8 4 13 12 9. Operația 1 1 6 : Se vor afișa cele doua valori cerute pe intervalul [1; 6]. Operația 1 1 2 : Se vor afișa cele doua valori cerute pe intervalul [1; 2]. Operația 1 3 4 : Se vor afișa cele doua valori cerute pe intervalul [3; 4].
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def apply_operation_0(arr, a, b, val):
for i in range(a - 1, b): arr[i] += val
def find_min_par_and_max_odd(arr, a, b):
min_par = float('inf') max_odd = float('-inf') for i in range(a - 1, b): if arr[i] % 2 == 0: min_par = min(min_par, arr[i]) else: max_odd = max(max_odd, arr[i]) if min_par == float('inf'): min_par = -1 if max_odd == float('-inf'): max_odd = -1 return min_par, max_odd
def main():
N = int(input()) arr = list(map(int, input().split())) Q = int(input())
for _ in range(Q): query = input().split() op = int(query[0]) a = int(query[1]) b = int(query[2])
if op == 0: val = int(query[3]) apply_operation_0(arr, a, b, val) elif op == 1: min_par, max_odd = find_min_par_and_max_odd(arr, a, b) print(min_par, max_odd)
if __name__ == "__main__":
main()
</syntaxhighlight>