Book Pile

题目描述

There is a pile of $N$ books on the table. Two types of operations are performed over this pile:

  • a book is added to the top of the pile,
  • top $K$ books are rotated. If there are less than $K$ books on the table, the whole pile is rotated.

First operation is denoted as $ADD(S)$ where $S$ is the name of the book, and the second operations is denoted as $ROTATE$.
The maximum number of books is no more than $40000$. All book names are non-empty sequences of no more than $3$ capital Latin letters. The names of the books can be non-unique.

题意概述

桌上有$N$本书叠成一堆。有两种操作:①往书堆上加一本书;②将最顶上的$K$本书翻转(若不足$K$本则全部翻转)。求操作$M$次后书本的顺序。
数据范围:$0 \le N \le 40000, \; 0 \le M \le 10^5, \; 0 \le K \le 40000$。

算法分析

这题可以用Splay来做,但其实有更简单的方法。
由于只会在顶上加书,也只会翻转顶上$K$本书,所以只要维护顶上$K$本书的状态即可。建一个长度为$K$的双端队列,每次翻转相当于向队列的另一端加书,队列长度大于$K$时在加书的另一端弹出一本书(这本书不会再受到翻转影响)。

RegMs If

418 I'm a teapot

Leave a Reply

Your email address will not be published. Required fields are marked *