[SDCPC2023] Colorful Segments 線段樹轉移DP

Sakya_maid發表於2024-05-28
Codeforces 連結

洛谷題目連結

# [SDCPC2023] Colorful Segments

## 題面翻譯

**【題目描述】**

考慮數軸上的 $n$ 條線段,其中第 $i$ 條線段的左端點為 $l_i$,右端點為 $r_i$。每一條線段都被塗上了顏色,其中第 $i$ 條線段的顏色為 $c_i$($0 \le c_i \le 1$)。顏色共有兩種,$c_i = 0$ 代表一條紅色的線段,而 $c_i = 1$ 代表一條藍色的線段。

您需要選擇若干條線段(可以不選擇任何線段)。如果您選擇的任意兩條線段有重合,則這兩條線段的顏色必須相同。

求選擇線段的不同方案數。

稱第 $i$ 條線段和第 $j$ 條線段有重合,若存在一個實數 $x$ 同時滿足 $l_i \le x \le r_i$ 且 $l_j \le x \le r_j$。

稱兩種選擇線段的方案是不同的,若存在一個整數 $1 \le k \le n$,滿足第 $k$ 條線段在其中一個方案中被選擇,而在另一個方案中沒有被選擇。

**【輸入格式】**

有多組測試資料。第一行輸入一個整數 $T$ 表示測試資料組數。對於每組測試資料:

第一行輸入一個整數 $n$($1 \le n \le 10^5$)表示線段的數量。

對於接下來 $n$ 行,第 $i$ 行輸入三個整數 $l_i$,$r_i$ 和 $c_i$($1 \le l_i \le r_i \le 10^9$,$0 \le c_i \le 1$)表示第 $i$ 條線段的左右端點以及顏色。

保證所有資料 $n$ 之和不超過 $5 \times 10^5$。

**【輸出格式】**

每組資料輸出一行一個整數表示選擇線段的不同方案數。由於答案可能很大,請將答案對 $998244353$ 取模後輸出。

**【樣例解釋】**

對於第一組樣例資料,您不能同時選擇第 $1$ 和第 $2$ 條線段,也不能同時選擇第 $2$ 和第 $3$ 條線段,因為它們有重合且顏色不同。

對於第二組樣例資料,因為第 $2$ 條線段與第 $1$ 和第 $3$ 條線段都不重合,因此您可以任意選擇線段。

## 題目描述

Consider $n$ segments on the number axis, where the left endpoint of the $i$-th segment is $l_i$ and the right endpoint is $r_i$. Each segment has a color where the color of the $i$-th segment is $c_i$ ($0 \le c_i \le 1$). There are two types of colors, where $c_i = 0$ indicates a red segment and $c_i = 1$ indicates a blue segment.

You need to choose some segments (you can also choose no segments at all). If any two chosen segments overlap, then they must have the same color.

Calculate the number of ways to choose segments.

We say segment $i$ overlaps with segment $j$, if there exists a real number $x$ satisfying both $l_i \le x \le r_i$ and $l_j \le x \le r_j$.

We say two ways of choosing segments are different, if there exists an integer $1 \le k \le n$ such that the $k$-th segment is chosen in one of the ways and is not chosen in the other.

## 輸入格式

There are multiple test cases. The first line of the input contains an integer $T$ indicating the number of test cases. For each test case:

The first line contains an integer $n$ ($1 \le n \le 10^5$) indicating the number of segments.

For the following $n$ lines, the $i$-th line contains three integers $l_i$, $r_i$ and $c_i$ ($1 \le l_i \le r_i \le 10^9$, $0 \le c_i \le 1$) indicating the left and right endpoints and the color of the $i$-th segment.

It's guaranteed that the sum of $n$ of all test cases will not exceed $5 \times 10^5$.

## 輸出格式

For each test case output one line containing one integer indicating the number of ways to choose segments. As the answer may be large, please output the answer modulo $998244353$.

## 樣例 #1

### 樣例輸入 #1

```
2
3
1 5 0
3 6 1
4 7 0
3
1 5 0
7 9 1
3 6 0
```

### 樣例輸出 #1

```
5
8
```

## 提示

For the first sample test case, you cannot choose the $1$-st and the $2$-nd segment, or the $2$-nd and the $3$-rd segment at the same time, because they overlap with each other and have different colors.

For the second sample test case, as the $2$-nd segment does not overlap with the $1$-st and the $3$-rd segment, you can choose them arbitrary.


按線段的 r 端點排序 對兩種顏色建兩顆不同的線段樹 ,列舉當前線段,設當前線段顏色是 A, 當前線段如果不選的話, 當前線段的 l 左邊的顏色B的線段全部都能轉移到當前的 r 端點處 ,當前答案轉移到顏色為A的線段樹, 如果選擇選當前的線段的話 ,當前線段的l 左邊的顏色B的線段全部 * 2, 因為顏色B可以選或者不選,當前答案轉移到顏色為B的線段樹

最後答案即為某一種顏色全部加起來,注意最開始從0開始往右邊轉移

相關文章