# PBinfo #4037 – CautariLiniare – Rezolvare C++

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

## Enunț

Cerința
Se dă un șir a1, a2, …, an de numere întregi. Se dau de asemenea numerele întregi x și k. Să se determine:
a) Cea mai din stânga poziție p din șir cu a[p] = x
b) Cea mai din dreapta poziție q din șir cu a[q] = x
c) Poziția r a celei de-a k-a apariții a lui x în șir.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere întregi, separate prin enter, reprezentând elementele șirului. În final, de pe ultimele două linii, se citesc numerele x și k.

Date de ieșire
Programul va afișa pe ecran, separate prin enter, valorile p, q și r. Dacă x nu apare în vector, atunci p și q vor fi egale cu 0, iar dacă x nu apare de cel puțin k ori, atunci r va fi 0.

Restricții și precizări

toate numerele citite la intrare sunt cuprinse între -1.000 și 1.000.
n și k sunt numere naturale nenule

Exemplul 1:
Intrare

12
2 
4 
5 
-7 
2 
3 
2 
5 
7 
2 
3 
4
2
3
Ieșire

1
10
7
Explicație
Șirul a este 2, 4, 5, -7, 2, 3, 2, 5, 7, 2, 3, 4, x=2 și k=3.
Cea mai din stânga poziție a lui 2 este la poziția 1, cea mai din dreapta este la poziția 10, iar a treia apariție a lui 2 este la poziția 7.

Exemplul 2:
Intrare

4
1
2
1
2
1
4
Ieșire

1
3
0
Explicație
Șirul a este 1, 2, 1, 2, x=1 și k=4. Cea mai din stânga poziție a lui 1 este la poziția 1, cea mai din dreapta este la poziția 3, iar a patra apariție a lui 1 nu există, deoarece 1 apare doar de două ori în șir, deci se afișează 0.

## Cod sursă C++

```cpp
#include<bits/stdc++.h>
using namespace std;
long long int n,v[2001], x , k , b , a , nr = 0 , c , cnt = 0;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    cin>>x>>k;
    for(int i=1;i<=n;i++)
    {
        if(v[i]==x && nr==0)
        {
            a=i;
            nr++;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(v[i]==x)
        {
            b=i;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(v[i]==x && cnt<k)
        {
            c=i;
            cnt++;
        }
    }
    if(nr==0) cout<<‘0’<<endl<<‘0’<<endl;
    else cout<<a<<endl<<b<<endl;
    if(cnt<k) cout<<‘0’;
    else cout<<c;
}
```

## Resurse

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