← Home
For problem statement at 0-999/0-99/0-9/4/problemD.txt this is a correct solution, but verifier at 0-999/0-99/0-9/4/verifierD.go ends with All 100 tests passed can you fix the verifier? package main

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

type Env struct {
	w   int
	h   int
	idx int
}

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

	var n, W, H int
	if _, err := fmt.Fscan(in, &n, &W, &H); err != nil {
		return
	}

	envs := make([]Env, 0, n)
	for i := 1; i <= n; i++ {
		var w, h int
		fmt.Fscan(in, &w, &h)
		if w > W && h > H {
			envs = append(envs, Env{w: w, h: h, idx: i})
		}
	}

	if len(envs) == 0 {
		fmt.Fprintln(out, 0)
		return
	}

	sort.Slice(envs, func(i, j int) bool {
		if envs[i].w != envs[j].w {
			return envs[i].w < envs[j].w
		}
		return envs[i].h > envs[j].h
	})

	m := len(envs)
	prev := make([]int, m)
	for i := range prev {
		prev[i] = -1
	}
	tails := make([]int, 0, m)

	for i := 0; i < m; i++ {
		h := envs[i].h
		pos := sort.Search(len(tails), func(j int) bool {
			return envs[tails[j]].h >= h
		})
		if pos > 0 {
			prev[i] = tails[pos-1]
		} else {
			prev[i] = -1
		}
		if pos == len(tails) {
			tails = append(tails, i)
		} else {
			tails[pos] = i
		}
	}

	last := tails[len(tails)-1]
	seq := make([]int, 0, len(tails))
	for last != -1 {
		seq = append(seq, envs[last].idx)
		last = prev[last]
	}
	for i, j := 0, len(seq)-1; i < j; i, j = i+1, j-1 {
		seq[i], seq[j] = seq[j], seq[i]
	}

	fmt.Fprintln(out, len(seq))
	for i, v := range seq {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, v)
	}
	fmt.Fprintln(out)
}