shoot.go 576 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package main
  2. import "fmt"
  3. func main() {
  4. var n, m int
  5. fmt.Scan(&n, &m)
  6. shoot := make([]int, n)
  7. for i := range shoot {
  8. fmt.Scan(&shoot[i])
  9. }
  10. min, cnt := -1, 0
  11. ma := make([]int, m+1)
  12. l, r := 0, 0
  13. for ; r < n; r++ {
  14. if cnt == m {
  15. for ; l <= r && cnt == m; l++ {
  16. if min == -1 || r-l < min {
  17. min = r - l
  18. }
  19. if c := shoot[l]; c != 0 {
  20. ma[c]--
  21. if ma[c] == 0 {
  22. cnt--
  23. }
  24. }
  25. }
  26. }
  27. if c := shoot[r]; c != 0 {
  28. if ma[c] == 0 {
  29. cnt++
  30. }
  31. ma[c]++
  32. }
  33. }
  34. if cnt == m && r-l < min {
  35. min = r - l
  36. }
  37. fmt.Println(min)
  38. }