#P17140. [NOI 2026] 线段

    ID: 19488 远端评测题 4000ms 1024MiB 尝试: 0 已通过: 0 显示难度提高+/省选− 上传者: 标签>动态规划 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 或者更高版本编译器编译。

题目描述

LLnn 条包含于 [1,m][1,m] 的线段,其中第 ii0i<n0\le i<n)条线段为 [li,ri][l_i,r_i]1lirim1\le l_i\le r_i\le m)。

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

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

LL 想知道有多少线段集合是优美的,因此他给定了一个正整数 kkknk\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=0asa_s1sk1\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+20i<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.insegment/segment2.ans

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

【样例 33

见选手目录下的 segment/segment3.insegment/segment3.ans

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

【样例 44

见选手目录下的 segment/segment4.insegment/segment4.ans

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

【样例 55

见选手目录下的 segment/segment5.insegment/segment5.ans

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

【样例 66

见选手目录下的 segment/segment6.insegment/segment6.ans

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

【样例 77

见选手目录下的 segment/segment7.insegment/segment7.ans

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

【数据范围】

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

  • 1t201\le t\le20
  • 1n30001\le n\le30001m1031\le m\le10^31kn1\le k\le nK200K\le200
  • 对于所有 0i<n0\le i<n,均有 1lirim1\le l_i\le r_i\le m

::cute-table{tuack} | 测试点编号 | nn\le | mm\le | KK\le | kk\le | 特殊性质 | |:-:|:-:|:-:|:-:|:-:|:-:| | 131\sim3 | 2020 | 10210^2 | 2020 | 2020 | 无 | | 4,54,5 | 30003000 | 10310^3 | 200200 | 22 | ^ | | 686\sim8 | ^ | ^ | ^ | 33 | ^ | | 9,109,10 | 500500 | ^ | ^ | 200200 | AA | | 111511\sim15 | 30003000 | ^ | ^ | ^ | BB | | 161816\sim18 | 200200 | 500500 | 5050 | 5050 | CC | | 192119\sim21 | 500500 | 10310^3 | 200200 | 200200 | ^ | | 22,2322,23 | 10310^3 | 10210^2 | 3030 | 3030 | 无 | | 24,2524,25 | 30003000 | 10310^3 | 200200 | 200200 | ^ |

  • 特殊性质 AA:对于所有 0i,j<n0\le i,j<niji\ne j,均有线段 ii 不包含线段 jj,即 li>ljl_i>l_jri<rjr_i<r_j
  • 特殊性质 BB:对于所有 0i<j<n0\le i<j<n,均有线段 ii 包含线段 jj,或线段 ii 与线段 jj 不相交,即 liljrjril_i\le l_j\le r_j\le r_iri<ljr_i<l_jli>rjl_i>r_j
  • 特殊性质 CCnn 条线段的全部 2n2n 个端点互不相同,即 l0,l1,,ln1,r0,r1,,rn1l_0,l_1,\ldots,l_{n-1},r_0,r_1,\ldots,r_{n-1} 两两不同。