Submit solution

Points: 100
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Author:
Problem type
Allowed languages
C++, Pascal, pypy3, Python

Cho n ô hàng ngang được đánh số từ 1 đến n . Cho k đoạn số nguyên, đoạn thứ i có dạng [l_i, r_i], không có hai đoạn nào giao nhau. Đang ở vị trí ô thứ c , bạn có thể thực hiện thao tác di chuyển như sau:

  • Chọn một số nguyên x sao cho tồn tại một chỉ số i thỏa mãn l_i \le x \le r_i , di chuyển đến ô c + x .
    Bạn hãy đếm số cách di chuyển từ ô thứ 1 đến ô thứ n .

Hai đoạn [a, b][c, d] được gọi là giao nhau khi và chỉ khi tồn tại một số nguyên z thỏa mãn a \le z \le b c \le z \le d .

Input:

  • Dòng đầu tiên chứa hai số nguyên nk (2 \leq n \leq 2 \times 10^5 ; 1 \leq k \leq \min(n,10)).
  • k dòng tiếp theo, dòng thứ i chứa hai số nguyên l_ir_i mô tả đoạn [l_i, r_i] (1 \leq l_i \leq r_i \leq n).
  • Dữ liệu đảm bảo không có hai đoạn nào giao nhau.

Output:

  • In ra số cách di chuyển từ từ ô thứ 1 đến ô thứ n, kết quả chia lấy dư cho 818976480.

Sample #1

stdin
6 2
3 4
1 1
stdout
6

Sample #2

stdin
3 1
2 2
stdout
1
Subtask
  • Subtask 1 với 20% số điểm: n, k \leq 10
  • Subtask 2 với 20% số điểm: n \leq 1000, k \leq 10
  • Subtask 3 với 20% số điểm: n \leq 10^5, k \leq 5
  • Subtask 4 với 20% số điểm: n \leq 2 \times 10^5, k \leq 2
  • Subtask 5 với 20% số điểm: Không ràng buộc gì thêm
Notes
  • Trong ví dụ đầu tiên, có tổng cộng 6 cách di chuyển như sau:
  • 1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 5 \rightarrow 6
  • 1 \rightarrow 2 \rightarrow 3 \rightarrow 6
  • 1 \rightarrow 2 \rightarrow 5 \rightarrow 6
  • 1 \rightarrow 2 \rightarrow 6
  • 1 \rightarrow 4 \rightarrow 5 \rightarrow 6
  • 1 \rightarrow 5 \rightarrow 6

Comments

There are no comments at the moment.