QOJ.ac

QOJ

حد الوقت: 5 s حد الذاكرة: 256 MB مجموع النقاط: 100

#1410. 收集图片很有趣

الإحصائيات

JOI 君非常喜欢收集图片,他拥有许多图片。最近,JOI 君发现由于收集了太多的图片,硬盘空间变得有些不足。虽然他没有钱购买新的硬盘,但对他来说,删除已有的图片是极其痛苦的,因此他决定通过巧妙地压缩图片来减少空间占用。

图片由 $2^N$ 行、$2^N$ 列的方阵组成,总共有 $2^N \times 2^N$ 个像素。每个像素要么是白色,要么是黑色。

JOI 君决定用以下方法压缩这种图片:

  • 如果图片中的所有像素颜色相同,则仅记录该颜色。此时,压缩后的数据大小为 $1$。
  • 否则,将图片分成 $4$ 个更小的图片。如果图片有 $2^k$ 行、$2^k$ 列,则在纵向和横向的中心将其分割,得到 $4$ 个 $2^{k-1}$ 行、$2^{k-1}$ 列的图片。用同样的方法压缩这 $4$ 个变小的图片。此时,压缩后的数据大小定义为这 $4$ 个小图片压缩后数据大小之和再加上 $1$。

JOI 君担心这种方法是否真的能压缩图片,因此决定对各种图片进行实验。实验方法如下:

  • 首先,准备一张所有像素均为白色的图片。
  • 对于 $i = 1, \dots, Q$,执行以下操作:“如果 $T_i = 0$,则将从上往下数第 $X_i$ 行的 $2^N$ 个像素的颜色反转(白变黑,黑变白);如果 $T_i = 1$,则将从左往右数第 $X_i$ 列的 $2^N$ 个像素的颜色反转”。也就是说,当我们将从上往下第 $a$ 行、从左往右第 $b$ 列的像素记为 $(a, b)$ 时,对于每个 $i$,如果 $T_i = 0$,则对满足 $1 \le b \le 2^N$ 的像素 $(X_i, b)$ 进行反转;如果 $T_i = 1$,则对满足 $1 \le a \le 2^N$ 的像素 $(a, X_i)$ 进行反转。
  • 对于每个 $i$,计算在第 $i$ 次操作完成后,使用 JOI 君的方法压缩图片时,压缩后的数据大小。

为了在实验中尽可能多地进行操作,需要高速计算压缩后的数据大小。

题目描述

给定表示图片大小的整数 $N$、操作次数 $Q$ 以及 $Q$ 次操作的指令,请编写一个程序,计算每次操作完成后,使用 JOI 君的方法压缩图片时,压缩后的数据大小。

输入格式

从标准输入读取以下内容:

  • 第 $1$ 行包含两个整数 $N, Q$,用空格分隔,表示图片大小为 $2^N \times 2^N$,以及操作次数为 $Q$。
  • 接下来的 $Q$ 行包含操作指令。其中第 $i$ 行 ($1 \le i \le Q$) 包含两个整数 $T_i, X_i$ ($0 \le T_i \le 1$ 且 $1 \le X_i \le 2^N$),用空格分隔,表示第 $i$ 次操作:若 $T_i = 0$,则反转从上往下第 $X_i$ 行的所有像素;若 $T_i = 1$,则反转从左往右第 $X_i$ 列的所有像素。

输出格式

输出 $Q$ 行到标准输出。第 $i$ 行 ($1 \le i \le Q$) 输出一个整数,表示第 $i$ 次操作完成后,使用 JOI 君的方法压缩图片时,压缩后的数据大小。

数据范围

所有输入数据满足以下条件:

  • $1 \le N \le 20$
  • $1 \le Q \le 2\,000\,000$

子任务

  1. (10 分) 满足 $N \le 6$,$Q \le 128$。
  2. (20 分) 满足 $N \le 10$,$Q \le 2048$。
  3. (70 分) 无额外限制。

样例

输入 1

2 3
0 1
1 2
0 3

输出 1

13
17
21

说明

在此例中,$Q = 3$ 次操作执行过程如下:

初始状态 □□□□ □□□□ □□□□ □□□□ ↓ ■■■■ □□□□ □□□□ □□□□ ↓ ■□■■ □■□□ □■□□ □■□□ ↓ ■□■■ □■□□ ■□■■ □■□□

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.