← Home
For problem statement at 0-999/300-399/370-379/372/problemC.txt this is a correct solution, but verifier at 0-999/300-399/370-379/372/verifierC.go ends with All 100 tests passed can you fix the verifier? package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, m int
	var d int64
	fmt.Fscan(reader, &n, &m, &d)

	dp := make([]int64, n+1)
	dp_prev := make([]int64, n+1)
	q := make([]int, n+1)

	var t_prev int64 = 1

	for i := 0; i < m; i++ {
		var a int
		var b, t int64
		fmt.Fscan(reader, &a, &b, &t)

		dp, dp_prev = dp_prev, dp

		max_dist := (t - t_prev) * d
		if max_dist > int64(n) {
			max_dist = int64(n)
		}
		md := int(max_dist)

		head, tail := 0, 0
		right := 1

		for x := 1; x <= n; x++ {
			lim := x + md
			if lim > n {
				lim = n
			}
			for ; right <= lim; right++ {
				for tail > head && dp_prev[q[tail-1]] <= dp_prev[right] {
					tail--
				}
				q[tail] = right
				tail++
			}

			for head < tail && q[head] < x-md {
				head++
			}

			dist := a - x
			if dist < 0 {
				dist = -dist
			}

			dp[x] = dp_prev[q[head]] + b - int64(dist)
		}
		t_prev = t
	}

	ans := dp[1]
	for x := 2; x <= n; x++ {
		if dp[x] > ans {
			ans = dp[x]
		}
	}
	fmt.Println(ans)
}