În jurul muzeului din orașul Smallville exista un gard ce conține N scânduri de înălțimi diferite. Putem spune că scândura i are înălțimea Hi. Directorul muzeului le-a cerut angajaților să vopsească acest gard cu un număr minim de culori, astfel încât să se respecte următoarea condiție: pentru un număr întreg K cunoscut, orice secvență de K scânduri consecutive nu trebuie să conțină două scânduri de aceeași înălțime, colorate identic.
Cerința
Scrieţi un program care să găsească numărul minim de culori ce vor fi folosite pentru a colora gardul.
Date de intrare
Fișierul de intrare culori.in conține pe prima linie N K – două numere întregi reprezentând numărul de scânduri și lungimea secvenței. Pe următoarea linie, N numere naturale Hi reprezentand înălțimile celor N scânduri.
Date de ieșire
Fișierul de ieșire culori.out va conține un număr întreg C reprezentând numărul minim de culori folosite.
Restricții și precizări
1 ≤ K ≤ 200.0001 ≤ K ≤ N ≤ 1.000.0001 ≤ Hi≤ 1.000- Pentru 50% din punctaj,
1 ≤ K ≤ N ≤ 5.000 - Pentru 80% din punctaj,
1 ≤ K ≤ N ≤ 200.000
Exemplu
culori.in
6 4 1 1 2 1 3 2
culori.out
3
Explicație
O posibilă colorare a scândurilor folosind culorile 1, 2, 3 este: 1 2 1 3 1 2.
Există 3 secvențe: 1 1 2 1, 1 2 1 3 și 2 1 3 2 și orice secvență respectă condiția din enunț.
#include <bits/stdc++.h>
using namespace std;
ifstream cin("culori.in");
ofstream cout("culori.out");
int f[2001], maxi = 0;
int a[1000001];
int main(){
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = 1; i <= k; ++i)
f[a[i]] ++, maxi = max(maxi, f[a[i]]);
for(int i = k + 1; i <= n; ++i){
f[a[i - k]] --;
f[a[i]]++;
maxi = max(maxi, f[a[i]]);
}
cout << maxi;
return 0;
}