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] và [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 và c \le z \le d .
Input:
- Dòng đầu tiên chứa hai số nguyên n và k (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_i và r_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