#P17140. [NOI 2026] 线段

    ID: 17343 Type: RemoteJudge 4000ms 512MiB Tried: 0 Accepted: 0 Difficulty: 8 Uploaded By: Tags>动态规划 DPNOI交互题前缀和2026

[NOI 2026] 线段

题目背景

题面、样例附件来自 QOJ。

提交到洛谷上时,无需引用头文件 #include "segment.h"。直接将

void init(int c, int t);
std::vector<int> segment(int n, int m, int k, std::vector<int> l, std::vector<int> r);

复制到程序开头,同时选用 C++17 或者更高版本编译器编译。

题目描述

小 L 有 nn 条包含于 [1,m][1,m] 的线段,其中第 ii(0≤i<n0\le i<n)条线段为 [li,ri][l_i,r_i](1≤li≤ri≤m1\le l_i\le r_i\le m)。

小 L 认为过于复杂的线段相交关系不够优美。对于每一个线段集合 S⊆{0,1,…,n−1}S\subseteq\{0,1,\ldots,n-1\},小 L 定义 SS 是 优美 的,当且仅当满足如下要求:

  • 构造一个顶点集合与 SS 对应的图。顶点 uu 与顶点 vv 之间存在一条边,当且仅当线段 uu 与线段 vv 相交,即存在 x∈[1,m]x\in[1,m],满足 lu≤x≤rul_u\le x\le r_u 且 lv≤x≤rvl_v\le x\le r_v。称 SS 是 优美 的,当且仅当构造出的图恰好为一棵树。

小 L 想知道有多少线段集合是优美的,因此他给定了一个正整数 kk(k≤nk\le n)。你需要计算,对于每个 s=1,2,…,ks=1,2,\ldots,k,有多少个大小为 ss 的集合是优美的。

由于答案可能较大,只需求出答案对 998,244,353998,244,353 取模后的结果。

【测试程序方式】

选手不需要,也不应该实现 main 函数。

选手需要确保提交的程序源文件包含头文件 segment.h,即在程序开头加入以下代码:

#include "segment.h"

选手需要在提交的程序源文件 segment.cpp 中实现以下两个函数:

void init(int c, int t);
  • c,tc,t 分别表示测试点编号与测试数据组数。c=0c=0 表示该测试点为样例。
  • 对于每个测试点,该函数会在程序开始运行时被评测程序调用恰好一次。
std::vector<int> segment(int n, int m, int k, std::vector<int> l, std::vector<int> r);
  • n,m,kn,m,k 分别表示线段的数量、坐标范围上限及需要计算的集合大小上限。
  • l,rl,r 分别表示每条线段的左端点与右端点。
  • 该函数需要返回一个长度 恰好 为 k+1k+1 的序列 aa,其中 a0=0a_0=0,asa_s(1≤s≤k1\le s\le k)表示大小为 ss 的优美集合数量对 998,244,353998,244,353 取模后的结果。
  • 对于每个测试点,该函数会被评测程序调用恰好 tt 次。

本试题目录下的 template_segment.cpp 是提供的示例代码,选手可参考并实现自己的代码。

输入格式

选手可以在本题目录下使用如下命令编译得到可执行文件:

g++ grader.cpp segment.cpp -o segment -O2 -std=c++14 -static

对于编译得到的可执行文件 segment:

  • 可执行文件将从标准输入读入以下格式的数据:
    • 第一行包含两个非负整数 c,tc,t。
    • 接下来依次为每组测试数据。对于每组测试数据:
      • 第一行包含三个正整数 n,m,kn,m,k。
      • 第 i+2i+2(0≤i<n0\le i<n)行包含两个正整数 li,ril_i,r_i。
  • 可执行文件将输出以下格式的数据至标准输出:
    • 对于每组测试数据,输出一行 kk 个非负整数 a1,a2,…,aka_1,a_2,\ldots,a_k。
0 3
3 3 3
1 2
2 3
1 3
4 5 4
1 2
2 3
3 4
4 5
4 2 3
1 2
1 2
1 2
1 1
3 3 0
4 3 2 1
4 6 0

提示

【样例 11 解释】

对于第一组测试数据:

  • 大小为 11 的集合有 {0},{1},{2}\{0\},\{1\},\{2\},均是优美的。
  • 大小为 22 的集合有 {0,1},{1,2},{0,2}\{0,1\},\{1,2\},\{0,2\},均是优美的。
  • 大小为 33 的集合有 {0,1,2}\{0,1,2\},构造出的图是一个三元环,不是优美的。

因此答案分别为 3,3,03,3,0。

对于第二组测试数据:

  • 大小为 11 的集合中,所有 44 个集合均是优美的。
  • 大小为 22 的集合中,{0,1},{1,2},{2,3}\{0,1\},\{1,2\},\{2,3\} 是优美的。
  • 大小为 33 的集合中,{0,1,2},{1,2,3}\{0,1,2\},\{1,2,3\} 是优美的。
  • 大小为 44 的集合 {0,1,2,3}\{0,1,2,3\} 是优美的。 因此答案分别为 4,3,2,14,3,2,1。

【样例 22】

见选手目录下的 segment/segment2.in 与 segment/segment2.ans。

该样例满足测试点 6∼86\sim8 的约束条件。

【样例 33】

见选手目录下的 segment/segment3.in 与 segment/segment3.ans。

该样例满足测试点 9,109,10 的约束条件。

【样例 44】

见选手目录下的 segment/segment4.in 与 segment/segment4.ans。

该样例满足测试点 11∼1511\sim15 的约束条件。

【样例 55】

见选手目录下的 segment/segment5.in 与 segment/segment5.ans。

该样例满足测试点 16∼1816\sim18 的约束条件。

【样例 66】

见选手目录下的 segment/segment6.in 与 segment/segment6.ans。

该样例满足测试点 22,2322,23 的约束条件。

【样例 77】

见选手目录下的 segment/segment7.in 与 segment/segment7.ans。

该样例满足测试点 24,2524,25 的约束条件。

【数据范围】

设 KK 为单个测试点内所有测试数据的 kk 的和。对于所有测试数据,均有:

  • 1≤t≤201\le t\le20;
  • 1≤n≤30001\le n\le3000,1≤m≤1031\le m\le10^3,1≤k≤n1\le k\le n,K≤200K\le200;
  • 对于所有 0≤i<n0\le i<n,均有 1≤li≤ri≤m1\le l_i\le r_i\le m。

::cute-table{tuack} | 测试点编号 | n≤n\le | m≤m\le | K≤K\le | k≤k\le | 特殊性质 | |:-:|:-:|:-:|:-:|:-:|:-:| | 1∼31\sim3 | 2020 | 10210^2 | 2020 | 2020 | 无 | | 4,54,5 | 30003000 | 10310^3 | 200200 | 22 | ^ | | 6∼86\sim8 | ^ | ^ | ^ | 33 | ^ | | 9,109,10 | 500500 | ^ | ^ | 200200 | AA | | 11∼1511\sim15 | 30003000 | ^ | ^ | ^ | BB | | 16∼1816\sim18 | 200200 | 500500 | 5050 | 5050 | CC | | 19∼2119\sim21 | 500500 | 10310^3 | 200200 | 200200 | ^ | | 22,2322,23 | 10310^3 | 10210^2 | 3030 | 3030 | 无 | | 24,2524,25 | 30003000 | 10310^3 | 200200 | 200200 | ^ |

  • 特殊性质 AA:对于所有 0≤i,j<n0\le i,j<n 且 i≠ji\ne j,均有线段 ii 不包含线段 jj,即 li>ljl_i>l_j 或 ri<rjr_i<r_j。
  • 特殊性质 BB:对于所有 0≤i<j<n0\le i<j<n,均有线段 ii 包含线段 jj,或线段 ii 与线段 jj 不相交,即 li≤lj≤rj≤ril_i\le l_j\le r_j\le r_i、ri<ljr_i<l_j 或 li>rjl_i>r_j。
  • 特殊性质 CC:nn 条线段的全部 2n2n 个端点互不相同,即 l0,l1,…,ln−1,r0,r1,…,rn−1l_0,l_1,\ldots,l_{n-1},r_0,r_1,\ldots,r_{n-1} 两两不同。