#P17055. [SGU263] Towers

[SGU263] Towers

题目描述

有一排 10610^6 个格子,编号为 1110610^6,初始时均为空。机器人可以向指定格子放入若干方块;若该格子已有方块,新方块叠在原有方块之上。

对于 iji\le j,如果格子 i,i+1,,ji,i+1,\ldots,j 均有正数个方块,并且格子 i1i-1 为空(或 i=1i=1)、格子 j+1j+1 为空(或 j=106j=10^6),则格子 iijj 上的方块构成一座塔。塔长为 ji+1j-i+1。所有塔按从左到右编号;一座塔内部的列也按从左到右从 11 开始编号。

你需要依次处理以下命令。

操作命令

  • put x c:向全局编号为 xx 的格子加入 cc 个方块。
  • tput t x c:向第 tt 座塔的第 xx 列加入 cc 个方块。

查询命令

  • towers:输出当前塔的总数。
  • cubes t:输出第 tt 座塔中的方块总数。
  • length t:输出第 tt 座塔的长度。
  • tcubes t x:输出第 tt 座塔第 xx 列中的方块数。

输入格式

第一行一个整数 NN,表示命令数。接下来 NN 行,每行是一条上述命令。

保证所有命令合法:格子编号均在 1110610^6 内;被引用的塔一定存在;列编号一定在对应塔内,映射到的格子编号也合法。任意格子上的方块数不会超过 23112^{31}-1

输出格式

每个查询命令输出一行,格式必须与样例完全一致:

  • towers 输出 <答案> towers
  • cubes t 输出 <答案> cubes in <t>th tower
  • length t 输出 length of <t>th tower is <答案>
  • tcubes t x 输出 <答案> cubes in <x>th column of <t>th tower

不要按英语语法修改单复数或序数词。即使数字是 112233,仍然输出 1 towers1 cubes1th2th3th

数据范围

  • 1N1061\le N\le10^6
  • 1x1061\le x\le10^6
  • 单个格子的最终方块数不超过 23112^{31}-1
  • 时间限制:1.251.25
  • 内存限制:6464 MiB

原题数据很大,输入输出效率会显著影响运行时间。

样例

输入

22
towers
put 2 5
put 1 6
put 3 6
put 3 3
towers
length 1
put 6 3
put 5 4
length 2
tcubes 2 1
tcubes 2 2
towers
cubes 1
cubes 2
put 4 3
towers
cubes 1
tput 1 6 50
cubes 1
tcubes 1 6
length 1

输出

0 towers
1 towers
length of 1th tower is 3
length of 2th tower is 2
4 cubes in 1th column of 2th tower
3 cubes in 2th column of 2th tower
2 towers
20 cubes in 1th tower
7 cubes in 2th tower
1 towers
30 cubes in 1th tower
80 cubes in 1th tower
53 cubes in 6th column of 1th tower
length of 1th tower is 6