FSEGMENT - Truy vấn đoạn thẳng

Xem dạng PDF

Gửi bài giải

Điểm: 3,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Trên một hệ trục tọa độ Ox, có N đoạn thẳng. Các đoạn thẳng được đánh số từ 1 đến N. Đoạn thẳng thứ i có đầu mút bên trái tại Li và đầu mút bên phải tại Ri.Ta nói rằng, một điểm có tọa độ x được phủ bởi đoạn thẳng i khi và chỉ khi x nằm giữa hai đầu mút của i (tức là Li ≤ x ≤ Ri).Có Q truy vấn, mỗi truy vấn được mô tả bởi hai số nguyên a và b, yêu cầu:

• Trong số N đoạn thẳng đã cho, cần chọn ra một số đoạn thẳng, sao cho tất cả các điểm cótọa độ từ a đến b đều được bao phủ bởi ít nhất một đoạn thẳng trong các đoạn thẳng được lựa chọn. Hãy in ra số lượng đoạn thẳng ít nhất cần lựa chọn.

Yêu cầu: Viết chương trình trả lời Q truy vấn trên.

Input

• Dòng đầu tiên gồm số nguyên N (1 ≤ N ≤ 200000) - số đoạn thẳng.

• N dòng tiếp theo, dòng thứ i gồm hai số nguyên Li và Ri (~ 0 ≤ Li ≤ Ri ≤ 10^9 ~) - tọa độ hai đầu mút của đoạn thẳng thứ i.

• Dòng tiếp theo gồm số nguyên Q (1 ≤ Q ≤ 200000) - số truy vấn cần xử lí.

• Q dòng tiếp theo, mỗi dòng gồm hai số nguyên a và b (~ 0 ≤ a ≤ b ≤ 10^9 ~) mô tả một truy vấn.

Output

• Với mỗi truy vấn, in ra một dòng gồm một số nguyên duy nhất là số đoạn thẳng ít nhất cần lựa chọn. Trong trường hợp không có cách chọn, hãy in ra -1.

Sample

Input #1
5
0 3
1 2
2 4
8 10
5 8
4
1 4
0 10
8 11
5 7
Output #1
2
4
-1
1

Hint

• Với truy vấn thứ nhất, có thể chọn các đoạn thẳng 2 và 3.

• Với truy vấn thứ hai, có thể chọn các đoạn thẳng 1, 3, 4 và 5.

• Với truy vấn thứ tư, có thể chọn đoạn thẳng 5.

Problem source: Free Contest Cup 2018


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.