money.go 855 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. type ints [][2]int
  7. func (is ints) Len() int { return len(is) }
  8. func (is ints) Less(i, j int) bool { return is[i][0] < is[j][0] }
  9. func (is ints) Swap(i, j int) { is[i], is[j] = is[j], is[i] }
  10. func main() {
  11. var n, d int
  12. fmt.Scan(&n, &d)
  13. var is ints = make([][2]int, n)
  14. for i := range is {
  15. fmt.Scan(&is[i][0], &is[i][1])
  16. }
  17. sort.Sort(is)
  18. dp := make([]int, n)
  19. idx := 0
  20. dp[0] = -1
  21. for i := 1; i < n; i++ {
  22. if is[i][0]-is[idx][0] < d {
  23. dp[i] = dp[i-1]
  24. continue
  25. }
  26. if pre := dp[i-1]; pre == -1 || is[pre][1] < is[idx][1] {
  27. dp[i] = idx
  28. } else {
  29. dp[i] = dp[i-1]
  30. }
  31. idx++
  32. }
  33. max := 0
  34. for i := range dp {
  35. if dp[i] == -1 {
  36. continue
  37. }
  38. max = maxInt(max, is[i][1]+is[dp[i]][1])
  39. }
  40. fmt.Println(max)
  41. }
  42. func maxInt(x, y int) int {
  43. if x < y {
  44. return y
  45. }
  46. return x
  47. }