← Home
For problem statement at 1000-1999/1500-1599/1570-1579/1575/problemL.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1570-1579/1575/verifierL.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

type Pair struct {
	a int
	b int
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}
	pairs := make([]Pair, 0, n)
	for i := 1; i <= n; i++ {
		var ai int
		fmt.Fscan(in, &ai)
		if i >= ai {
			pairs = append(pairs, Pair{a: ai, b: i - ai})
		}
	}

	sort.Slice(pairs, func(i, j int) bool {
		if pairs[i].a != pairs[j].a {
			return pairs[i].a < pairs[j].a
		}
		return pairs[i].b > pairs[j].b
	})

	tails := make([]int, 0, len(pairs))
	for _, p := range pairs {
		x := p.b
		if len(tails) == 0 || x >= tails[len(tails)-1] {
			tails = append(tails, x)
		} else {
			pos := sort.Search(len(tails), func(i int) bool { return tails[i] > x })
			tails[pos] = x
		}
	}
	fmt.Fprintln(out, len(tails))
}