# PBinfo #184 – Interval1 – Rezolvare C++

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

## Enunț

Cerinţa
Se dă un şir de n numere întregi şi un număr k. Să se determine intervalul [a,b] de lungime minimă care conţine cel puţin k elemente din sir.

Date de intrare
Fişierul de intrare interval1.in conţine pe prima linie numerele n şi k, iar pe următoarele linii n numere întregi separate prin spaţii, reprezentând elementele şirului. 

Date de ieşire
Fişierul de ieşire interval1.out va conţine pe prima linie două numere a şi b, separate printr-un spaţiu, cu semnificaţia de mai sus.

Restricţii şi precizări

1 ≤ k ≤ n ≤ 1000
elementele şirului aparţin intervalului [-1000,1000] şi pot fi dispuse în fişierul de intrare pe mai multe linii
dacă există mai multe intervale [a,b] de lungime minimă care conţin cel puţin k elemente din sir se va alege acela pentru care a este minim
a ≤ b

Exemplu:
interval1.in

10 3
11 9 3 2 8 11 9 10 15 13 
interval1.out

8 9
Explicație
Intervalul [8,9] conţine 3 elemente ale şirului – 8 9 9 şi are lungimea minimă. Există încă un interval cu aceeaşi lungime care conţine 3 elemente din şir – [9,10] elemente dar 8<9.

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("interval1.in");
ofstream fout("interval1.out");
int n, k, a[1005];
int main(){
	fin >> n >> k;
	for(int i=1;i<=n;++i)
		fin >> a[i];
	for(int i=1;i<=n;++i)
		for(int j=i+1;j<=n;++j)
				if(a[i]>a[j]){
					int aux = a[i];
					a[i] = a[j];
					a[j] = aux;
				}
	int aa=a[1],bb=a[k];
	for(int i=1;i<=n-k+1;++i)
		if(a[i+k-1]-a[i]<bb-aa)
			aa = a[i], bb = a[i+k-1];
	fout << aa << " " << bb;
	return 0;
}
```

## Resurse

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