← Home
 ```go
package main

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

const MOD int64 = 998244353

type Fenwick struct {
	n    int
	tree []int64
}

func NewFenwick(n int) *Fenwick {
	return &Fenwick{
		n:    n,
		tree: make([]int64, n+2),
	}
}

func (f *Fenwick) Update(i int, val int64) {
	for i <= f.n {
		f.tree[i] = (f.tree[i] + val) % MOD
		i += i & -i
	}
}

func (f *Fenwick) Query(i int) int64 {
	var res int64 = 0
	for i > 0 {
		res = (res + f.tree[i]) % MOD
		i -= i & -i
	}
	return res
}

func (f *Fenwick) RangeQuery(l, r int) int64 {
	if l > r {
		return 0
	}
	res := f.Query(r) - f.Query(l-1)
	res %= MOD
	if res < 0 {
		res += MOD
	}
	return res
}

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

	var n int
	fmt.Fscan(in, &n)

	x := make([]int64, n+1)
	y := make([]int64, n+1)
	s := make([]int, n+1)

	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &x[i], &y[i], &s[i])
	}

	bit := NewFenwick(n)
	var ans int64 = (x[n] + 1) % MOD

	for i := 1; i <= n; i++ {
		l := 1
		if i > 1 {
			sz := i - 1
			pos := sort.Search(sz, func(j int) bool {
				return x[1+j] > y[i]
			})
			l = 1 + pos
		}

		var sum int64 = 0
		if l <= i-1 {
			sum = bit.RangeQuery(l, i-1)
		}

		dp := (x[i] - y[i] + sum) % MOD
		if dp < 0 {
			dp += MOD
		}

		if s[i] == 1 {
			ans = (ans + dp) % MOD
		}

		bit.Update(i, dp)
	}

	ans %= MOD
	if ans < 0 {
		ans += MOD
	}
	fmt.Fprintln(out, ans)
}
```