# PBinfo #3736 – sir15 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Se dă un șir format din N numere naturale nenule. Elementele șirului sunt numerotate de la stânga la dreapta începând cu poziția 1.

Cerința
Scrieți un program care să determine răspunsul pentru întrebări de următoarele tipuri:
1. Care este cea mai din stânga poziție care conține o valoare strict mai mare decât toate cele din dreapta sa? – întrebare de tipul 1
2. Care sunt pozițiile care conțin valori strict mai mari decât toate cele din stânga lor? – întrebare de tipul 2
3. Dacă fiecărui element aflat între prima și ultima apariție a maximului i-am mări valoarea pentru a ajunge egal cu maximul, care este suma totală a valorilor adăugate? – întrebare de tipul 3

Date de intrare
Fișierul de intrare sir.in conține pe prima linie un număr C (care poate fi 1, 2 sau 3), indicând tipul întrebării. Pe linia a doua se află un număr natural N, reprezentând numărul de elemente din șir. Pe a treia linie a fișierului de intrare se află N numere naturale, reprezentând elementele șirului, date de la stânga la dreapta (cel mai din stânga are poziția 1 și cel mai din dreapta are poziția N). Numerele de pe această linie sunt separate prin câte un spațiu.

Date de ieșire
Dacă C = 1, fișierul de ieșire sir.out trebuie să conțină un număr natural ce reprezintă răspunsul la o întrebare de tipul 1. Dacă C = 2, fișierul de ieșire trebuie să conțină, separați prin câte un spațiu și în ordine crescătoare, indicii determinați ca răspuns la o întrebare de tipul 2. Dacă C = 3, fișierul de ieșire trebuie să conțină un număr ce reprezintă răspunsul la o întrebare de tipul 3.

Restricții și precizări

1 ≤ C ≤ 3
1 ≤ N ≤ 100.000
Numerele din șirul dat sunt cuprinse între 1 și 10.000, inclusiv.
Pentru teste în valoare de 24 de puncte avem C = 1.
Pentru teste în valoare de 32 de puncte avem C = 2.
Pentru teste în valoare de 44 de puncte avem C = 3.

Exemplul 1:
sir.in

1
7
3 2 2 5 3 5 4
sir.out

6
Explicație
Cea mai din stânga poziție a unei valori care este mai mare decât toate cele din dreapta sa este 6 (acolo unde se află valoarea 5)

Exemplul 2:
sir.in

2
7
3 2 2 5 3 5 4
sir.out

1 4
Explicație
1 și 4 sunt pozițiile unde se află valori mai mari decât toate cele din stânga lor.

Exemplul 3:
sir.in

3
8
3 2 2 5 3 1 5 4
sir.out

6
Explicație
Maximul fiind 5, conform explicației de la întrebarea de tipul 3, trebuie mărite două elemente pentru a ajunge egale cu 5. Acestea sunt cel aflat pe poziția 5 (de mărit cu 2) precum și cel de pe poziția 6 (de mărit cu 4). Suma valorilor cu care avem de mărit este 2 + 4 = 6.

Exemplul 4:
sir.in

3
5
3 2 7 5 3
sir.out

0
Explicație
Maximul este 7 și apare o singură dată, deci nu se mai mărește nicio valoare.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream in ("sir.in");
ofstream out("sir.out");
int n, C, maxim = 0, temp, val, rez;
int main () {
    in >> C >> n;
    if (C == 1) {
        for (int i = 1; i <= n; i++) {
            in >> temp;
            if (temp >= maxim) {
                maxim = temp;
                val = i;
            }
        } out << val << '\n';
    } else if (C == 2) {
        for (int i = 1; i <= n; i++) {
           	in >> temp;
            if (temp > maxim) {
                maxim = temp;
                val++;
                if (val == 1) out << i;
                else out << " " << i;
            }
        } out << '\n';
    } else if (C == 3) {
        for (int i = 1; i <= n; i++) {
            in >> temp;
            if (temp > maxim) {
                maxim = temp;
                val = 0;
            } else val = val + (maxim - temp);
            if (temp == maxim) rez = val;
        } out << rez << '\n';
    } return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3736)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3736/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3736/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
