📜  门|门 CS 1999 |第 53 题(1)

📅  最后修改于: 2023-12-03 15:12:46.111000             🧑  作者: Mango

题目介绍:门|门 CS 1999 |第 53 题

题目描述

一个大门有 $n$ 个门闩,每个门闩可以是关闭或者打开状态。门上有 $m$ 个操作,每个操作会改变一些门闩的状态。请求出 $k$ 次操作后,所有门闩的状态。

输入格式
  • 第一行三个整数 $n,m,k$,$n$ 表示门闩的数量,$m$ 表示操作的数量,$k$ 表示查询次数。
  • 接下来 $m$ 行,每行开头一个正整数 $t$ 表示这个操作中会改变多少个门闩的状态,接下来 $t$ 个在 $1$ 到 $n$ 之间的整数表示这些门闩的编号。
  • 接下来 $k$ 行,每行两个整数 $x,y$,表示查询从 $x$ 号门闩到 $y$ 号门闩中有多少个门闩是开着的。
输出格式

输出 $k$ 行,分别表示对应的 $k$ 次查询的结果。

输入样例
5 5 3
3 1 2 5
2 2 3
1 4
2 4 5
2 2 5
1 1
2 2 4
输出样例
1
1
2
数据范围
  • $1\leq n,m,k\leq 10^5$
  • 每次修改操作的门闩数量 $\leq 100$
题目解析

这道题目主要考察的是离线处理。由于修改操作的次数可能很大,因此如果每次操作之后立刻进行统计的话,时间复杂度将很高。可以考虑将所有修改操作离线处理,直接计算出每个区间有多少个门闩是打开状态,最后再输出。这样就可以将时间复杂度降到每次修改操作的门闩数量的乘积。具体的思路可以采用差分的思路。

参考代码