3225 - Simple

From Bitnami MediaWiki

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>