Se dă un şir de N numere naturale. Din acest şir, putem forma un şir comprimat de forma: a[1], b[1], a[2], b[2], …, a[x], b[x], din care înţelegem că numărul a[1] apare pe primele b[1] poziţii, a[2] apare pe următoarele b[2] poziţii…, iar a[x] apare pe ultimele b[x] poziţii.
De exemplu, dacă şirul dat este 1 1 5 5 5 2, atunci şirul comprimat va fi 1 2 5 3 2 1.
Cerința
Să se determine:
a) Lungimea celei mai lungi secvenţe formată din numere egale.
Se dă un şir de N numere naturale. Din acest şir, putem forma un şir comprimat de forma: a[1], b[1], a[2], b[2], …, a[x], b[x], din care înţelegem că numărul a[1] apare pe primele b[1] poziţii, a[2] apare pe următoarele b[2] poziţii…, iar a[x] apare pe ultimele b[x] poziţii.
De exemplu, dacă şirul dat este 1 1 5 5 5 2, atunci şirul comprimat va fi 1 2 5 3 2 1.
Cerința
Să se determine:
a) Lungimea celei mai lungi secvenţe formată din numere egale.
b) Şirul comprimat pentru şirul dat.
Date de intrare
Fișierul de intrare sir6.in conține pe prima linie numerele P şi N. Pe următoarea linie se găseşte un şir format din N numere naturale.
Date de ieșire
Fișierul de ieșire sir6.out va conține pe prima linie:
a) Dacă P este 1, lungimea celei mai lungi secvenţe, reprezentând răspunsul la cerinţa a).
b) Dacă P este 2, şirul comprimat, reprezentând răspunsul la cerinţa b).
Restricții și precizări
N <= 100 000- Numerele din şir nu depăşesc
1 000 000. Peste1sau2.
Exemplul 1
sir6.in
1 6 1 1 5 5 5 2
sir6.out
3
Explicație
Pentru acest test P = 1, deci se va rezolva doar cerinţa a). Secvenţa cea mai lungă formată din numere egale este: 5 5 5 şi are lungimea 3.
Exemplul 2
sir6.in
2 6 1 1 5 5 5 2
sir6.out
1 2 5 3 2 1
Explicație
Pentru acest test P = 2, deci se va rezolva doar cerinţa b). Numărul 1 apare de 2 ori, numărul 5 apare de 3 ori, iar numărul 2 apare o singură dată. Prin urmare, şirul comprimat este 1 2 5 3 2 1.
#include <bits/stdc++.h>
using namespace std;
ifstream cin("sir6.in");
ofstream cout("sir6.out");
int main()
{
int c , n , a[100001] , l = 0 , lmax = 0;
cin >> c >> n;
for(int i = 0 ; i < n ; ++i) cin >> a[i];
if(c == 1)
{
for(int i = 0 ; i < n ; ++i)
{
if(a[i] == a[i+1]) l++;
if(l > lmax)lmax = l;
if(a[i] != a[i+1]) l = 0;
}
cout << lmax+1;
}
if(c == 2)
{
int i = 0 , cnt = 0;
for(i = 0 ; i < n ; ++i)
{
while(a[i] == a[i+1]) cnt++ , i++;
cout << a[i] << " " << cnt+1<< " ";
cnt = 0;
}
}
}