Î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 H
i
. 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.000
1 ≤ K ≤ N ≤ 1.000.000
1 ≤ H
i
≤ 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; }