P10832 [COTS 2023] 传 Mapa

题目背景

译自 [Izborne Pripreme 2023 (Croatian IOI/CEOI Team Selection)](https://hsin.hr/pripreme2023/) D2T1。$\texttt{1s,0.5G}$。 祝 NaCly_Fish 生日快乐!(2024.7.28) ~~**受洛谷评测系统的限制(本题需要 run-twice),本题无法评测。**~~

题目描述

给定 $N$ 对 $[1,10^9]$ 间的正整数,类似于 C++ 中的 $\texttt{std::map}$,可以把每对数的第一个数看成「键」(key),第二个数看成「值」(value)。保证键两两不同,可以通过键查询值。 你想要发送这 $N$ 对正整数,但是受带宽限制,只能将这 $N$ 对正整数压缩成一个 $\texttt{01}$ 串来发送。 写一个程序,将这 $N$ 对正整数压缩成 $\texttt{01}$ 串;或者给定你构造的 $\texttt{01}$ 串,$Q$ 次询问给定键,你要回答对应的值。

输入格式

第一行,一个正整数 $T\in \{1,2\}$,表示数据类型:若为 $1$,则为编码操作;否则为解码操作。 - 当 $T=1$ 时: 第二行,一个整数 $N$,代表正整数对数; 接下来 $N$ 行,每行两个正整数 $x_i,y_i$,分别表示键和对应的值。 - 当 $T=2$ 时: 第二行,三个正整数 $N,Q,K$,表示正整数对数,询问次数和 $\texttt{01}$ 串长度; 第三行,一个长度为 $K$ 的 $\texttt{01}$ 串。 接下来 $Q$ 行,每行一个正整数 $x_i$,表示询问的键。

输出格式

- 当 $T=1$ 时: 第一行,一个正整数 $K$,表示你构造的 $\texttt{01}$ 串长度; 第二行,你构造的 $\texttt{01}$ 串。 - 当 $T=2$ 时: 输出 $Q$ 行,每行一个正整数,表示对应的值。

说明/提示

#### 数据范围 对于 $100\%$ 的数据,保证: - $T\in \{1,2\}$; - $1\le N,Q\le 100$,$1\le K\le 6\, 000$; - $1\le x_i,y_i\le 10^9$; - $x_i$ 两两不同。 #### 评分方式 如果你的输出格式有错或者没有正确回答询问,得 $0$ 分。 否则记 $K$ 为你输出的 $\texttt{01}$ 串长度,得分由下表确定: | $K$ | 得分 | |:-----:|:------:| | $K\gt 6\, 000$ | $0$ | | $3\, 000\le K\le 6\, 000$ | $\displaystyle 100- \frac{K-3\, 000}{30}$ | | $K\le 3\, 000$ | $100$ |