QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 256 MB Total points: 100

#1410. Суреттер жинау қызықты

Statistics

JOI суреттер жинауды жақсы көреді және оның суреттері өте көп. Жақында JOI тым көп сурет жинағандықтан, қатты дискісінде орын таусылып бара жатқанын байқады. Оның жаңа қатты диск сатып алуға шамасы жоқ, ал суреттерінің кез келгенін өшіру оған өте ауыр тиеді, сондықтан ол орын үнемдеу үшін суреттерін сығуды (компрессиялауды) ұйғарды.

Сурет $2^N$ жол мен $2^N$ бағаннан тұратын шаршы торда орналасқан барлығы $2^N \times 2^N$ пиксельмен беріледі. Әрбір пиксель ақ немесе қара түсті болады.

JOI мұндай суретті келесі әдіспен сығуды шешті:

  • Егер суреттегі барлық пиксельдердің түсі бірдей болса, тек сол түсті жазып қояды. Бұл жағдайда сығылған деректердің өлшемі $1$-ге тең.
  • Әйтпесе, суретті төрт кішірек суретке бөледі. Егер сурет $2^k$ жол мен $2^k$ бағаннан тұрса, суретті тігінен де, көлденеңінен де дәл ортасынан бөліп, $2^{k-1}$ жол мен $2^{k-1}$ бағаннан тұратын төрт сурет алады. Осы төрт кішірек суретті дәл сол әдіспен сығады. Бұл жағдайда сығылған деректердің өлшемі төрт кішірек суреттің сығылған деректерінің өлшемдерінің қосындысына $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 әдісімен сығылған деректердің өлшемін есептейтін программа жазыңыз.

Кіріс деректер

Стандартты кірістен келесі мәліметтерді оқыңыз:

  • Бірінші жолда бос орынмен бөлінген екі бүтін сан $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$-ші амалдан кейінгі сығылған деректердің өлшемін білдіретін бір бүтін сан болуы тиіс.

Шектеулер

Барлық кіріс деректері келесі шарттарды қанағаттандырады:

  • $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.