Secventa
Numim secvență impar-încadrată a unui șir de numere naturale un subșir al acestuia,
format din termeni aflați pe poziții consecutive în șirul dat, subșir care începe și se
termină cu aceeași valoare, impară. Lungimea secvenței este egală cu numărul de
termeni ai acesteia.
Fișierul aaa.txt conține un șir de cel puțin două și cel mult 106 numere naturale din
intervalul [0, 9]. Numerele sunt separate prin câte un spațiu, iar în șir există cel puțin doi
termeni impari egali.
Se cere să se determine secvențele impar-încadrate din acest șir care au lungime
maximă și să se afișeze pe prima linie a ecranului lungimea maximă determinată, iar pe
următoarea linie, pentru fiecare astfel de secvenţă, valoarea primului său termen.
Numerele de pe a doua linie sunt afişate în ordine strict crescătoare, separate prin câte
un spaţiu.
Proiectați un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul aaa.txt conţine numerele
123456689153
atunci pe ecran se afișează valorile:
10
1 3
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("a.in");
int p[5],u[5];
int main()
{int nr=0,x;
while(f>>x)
{nr++;
if(x%2==0)
{if(p[x/2]==0)
p[x/2]=nr;
u[x/2]=nr;
}
}
int ma=0;
for(int i=0;i<=4;i++)
if(u[i]!=0)
if(u[i]-p[i]+1>ma)
ma=u[i]-p[i]+1;
cout<<ma<<endl;
for(int i=0;i<=4;i++)
if(u[i]-p[i]+1==ma)
cout<<2*i<<" ";
return 0;
}