#P16353. [2026年山东第二轮集训]莫队之理

[2026年山东第二轮集训]莫队之理

当前没有测试数据。

题目描述

这是一道交互题,请引用:

#include "ds.h"

你会收到两个整数 n,qn,q,以及 qq 个区间

[l1,r1],[l2,r2],,[lq,rq].[l_1,r_1],[l_2,r_2],\ldots,[l_q,r_q].

保证

1lirin,1\le l_i\le r_i\le n,

且每个二元组 (li,ri)(l_i,r_i) 都是在所有满足 1lrn1\le l\le r\le n 的二元组中随机生成的。

你需要维护一个集合

S{1,2,,n},S\subseteq\{1,2,\ldots,n\},

初始时 S=S=\varnothing。你可以使用下面五种操作。

void add(int x);

SS 中添加整数 xx。你必须保证

1xn,xS.1\le x\le n,\qquad x\notin S.

void del(int x);

SS 中删除整数 xx。你必须保证

1xn,xS.1\le x\le n,\qquad x\in S.

void revoke();

设最近一次被加入 SS,且尚未被删除或撤销的元素为 xx,则将 xxSS 中删除。你必须保证存在这样的元素。

void clear();

清空 SS,即令

S=.S=\varnothing.

void report(int k);

向交互库报告已经形成了第 kk 个区间。调用时必须恰好满足

S={lk,lk+1,,rk}.S=\{l_k,l_k+1,\ldots,r_k\}.

当所有区间均被恰好报告一次时,视为完成任务。

实现方式

你需要实现下面的函数:

void solve(
    int n,
    int q,
    vector<int> l,
    vector<int> r
);

数组 lr 的下标范围均为 00q1q-1

子任务与评分

C1,C2,C3,C4,C5C_1,C_2,C_3,C_4,C_5 分别表示 adddelrevokeclearreport 五种操作的调用次数。

你必须保证:

C4n,C5=q.C_4\le n,\qquad C_5=q.
子任务编号 分值 nn\le qq\le C1C_1\le C2C_2\le C3C_3\le
1 10 10001000 10610^6 00 00
2 20 5×1045\times 10^4 10510^5 3500000035000000 3500000035000000
3 00 3500000035000000
4 50 6×1076\times 10^7 00

对于前三个子任务,只要对应操作次数均不超过限制,即可获得该子任务满分;否则该子任务得 00 分。

对于子任务 4:

  • C130000000C_1\le 30000000,获得该子任务满分,即 5050 分;
  • 30000000<C16000000030000000<C_1\le 60000000,获得的分数为
$$\left\lfloor 50\times\left(1-\frac{C_1-30000000}{30000000}\right) \right\rfloor;$$
  • C1>60000000C_1>60000000,或不满足其他限制条件,则获得 00 分。