题目名称 3691. 数列操作 C Plus Max
输入输出 shuliecplusmax.in/out
难度等级 ★★☆
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarlihaoze 于2022-06-28加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:1, 提交:2, 通过率:50%
Gravatarlihaoze 100 0.334 s 5.96 MiB C++
Gravatar元始天尊 0 1.406 s 3.27 MiB C++
关于 数列操作 C Plus Max 的近10条评论(全部评论)
本来是为了暑期训练比赛准备的题,还把题解写好了,但是无奈因为疫情原因取消了,就直接把题解放出来吧 Matrix
关于二维树状数组的一些用法,我在 自己的博客 里总结了一下,希望有帮助
Gravatarlihaoze
2022-08-03 10:07 1楼

3691. 数列操作 C Plus Max

★★☆   输入文件:shuliecplusmax.in   输出文件:shuliecplusmax.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

给定一个 $N \times N$ 的矩阵 $A$,它的元素由 $0$ 或 $1$ 组成。$A(i, j)$ 表示第 $i$ 列,第 $j$ 行的数。我们默认 $A(i, j) = 0 \ (1 \leq i, j \leq N)$。

我们可以通过这样的方式修改矩阵。给定一个矩形,左上角的坐标是 $(x_1, y_1)$,右下角的坐标是 $(x_2, y_2)$,我们可以用“非”运算(在 C 语言中这个运算符号是 !)修改这个矩形内的元素。为了维护矩阵的信息,你要接受和执行两种操作:

1. C x1 y1 x2 y2 ($1 \leq x_1 \leq x_2 \leq n, \ 1 \leq y_1 \leq y_2 \leq n$) 操作用来修改左上角的坐标是 $(x_1, y_1)$,右下角的坐标是 $(x_2, y_2)$ 的矩形。

2. Q x y ($1 \leq x, y \leq n$) 查询 $A(x, y)$。

【输入格式】

第一行包含一个正整数 $t \ (t \leq 10)$,表示测试数据的个数,接下来有 $t$ 组数据。

在每组数据中,第一行包括两个整数 $n, \ m \ (2 \leq n \leq 1000, \ 1 \leq m \leq 50000)$,分别表示矩阵的大小和操作的数量。

接下来 $t$ 行每行包括一个操作,格式为 Q x yC x1 y1 x2 y2

【输出格式】

对于每一个操作 “Q”,输出一行一个整数 $A(x, y)$。

每两个测试数据之间用一行空格隔开

【样例输入】

1
2 10
C 2 1 2 2
Q 2 2
C 2 1 2 1
Q 1 1
C 1 1 2 1
C 1 2 1 2
C 1 1 2 2
Q 1 1
C 1 1 2 1
Q 2 1

【样例输出】

1
0
0
1

【来源】

POJ Monthly,Lou Tiancheng,lhz翻译