trang chủ / bài tập / segsplit

Chia đoạn thành hai nhóm

Đề bài

Mô tả

Cho n đoạn thẳng [li,ri] trên trục số. Bạn cần chia toàn bộ các đoạn này thành hai nhóm khác rỗng sao cho không tồn tại cặp đoạn thuộc hai nhóm khác nhau mà có ít nhất một điểm chung. Hai đoạn [a,b][c,d] được coi là có điểm chung nếu max(a,c)min(b,d) — bao gồm cả trường hợp chỉ chạm đầu mút như [1,5][5,10]. Mỗi đoạn phải thuộc đúng một trong hai nhóm.

Hãy in ra một cách phân chia hợp lệ, hoặc thông báo rằng không tồn tại cách phân chia.

Để giảm áp lực dữ liệu, mỗi file kiểm thử chứa nhiều truy vấn độc lập.

Dữ liệu vào

  • Dòng đầu chứa số nguyên T — số truy vấn.
  • Mỗi truy vấn được mô tả như sau:
    • Dòng đầu chứa số nguyên n — số đoạn.
    • n dòng tiếp theo, dòng thứ i chứa hai số nguyên li,ri — đoạn thứ i.

Dữ liệu ra

Với mỗi truy vấn, in ra trên một dòng:

  • Nếu không tồn tại cách phân chia hợp lệ, in 1.
  • Ngược lại, in n số nguyên t1,t2,,tn (ti{1,2}), trong đó ti là chỉ số nhóm của đoạn thứ i. Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 1T50000
  • 2n105
  • 1liri2·105
  • Tổng n trên tất cả truy vấn không vượt quá 105.

Ví dụ

Input Output Giải thích
3
2
5 5
2 3
3
3 5
2 3
2 3
3
3 3
4 4
5 5
2 1
-1
1 2 2
Truy vấn 1: hai đoạn rời nhau, mỗi đoạn vào một nhóm.
Truy vấn 2: đoạn [3,5] cắt cả [2,3][2,3], nên cả ba phải cùng nhóm không thể có hai nhóm khác rỗng.
Truy vấn 3: ba đoạn rời nhau hoàn toàn — chia tuỳ ý miễn cả hai nhóm khác rỗng.
2
4
1 5
2 3
10 12
11 11
2
1 10
5 6
1 1 2 2
-1
Truy vấn 1: nhóm thành phần liên thông {[1,5],[2,3]}{[10,12],[11,11]}.
Truy vấn 2: đoạn [5,6] nằm trong [1,10] chỉ một thành phần.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0