Codeforces Round 457 (Div. 2)
D
Jamie and To-do List
Codeforces
2200
原题
← CE →
翻译中…

Why I have to finish so many assignments???

翻译中…

Jamie is getting very busy with his school life. He starts to forget the assignments that he has to do. He decided to write the things down on a to-do list. He assigns a value priority for each of his assignment (lower value means more important) so he can decide which he needs to spend more time on.

翻译中…

After a few days, Jamie finds out the list is too large that he can't even manage the list by himself! As you are a good friend of Jamie, help him write a program to support the following operations on the to-do list:

翻译中…
  • $*set* *a*_{*i*} *x*_{*i*}$ — Add assignment $*a*_{*i*}$ to the to-do list if it is not present, and set its priority to $*x*_{*i*}$. If assignment $*a*_{*i*}$ is already in the to-do list, its priority is changed to $*x*_{*i*}$.
  • $*remove* *a*_{*i*}$ — Remove assignment $*a*_{*i*}$ from the to-do list if it is present in it.
  • $*query* *a*_{*i*}$ — Output the number of assignments that are more important (have a smaller priority value) than assignment $*a*_{*i*}$, so Jamie can decide a better schedule. Output $- 1$ if $*a*_{*i*}$ is not in the to-do list.
  • $*undo* *d*_{*i*}$ — Undo all changes that have been made in the previous $*d*_{*i*}$ days (not including the day of this operation)
翻译中…

At day $0$, the to-do list is empty. In each of the following $*q*$ days, Jamie will do exactly one out of the four operations. If the operation is a $*query*$, you should output the result of the query before proceeding to the next day, or poor Jamie cannot make appropriate decisions.

翻译中…

Input

翻译中…

The first line consists of a single integer $*q*$ $(1 ≤ *q* ≤ 10^{5})$ — the number of operations.

翻译中…

The following $*q*$ lines consists of the description of the operations. The $*i*$-th line consists of the operation that Jamie has done in the $*i*$-th day. The query has the following format:

翻译中…

The first word in the line indicates the type of operation. It must be one of the following four: set, remove, query, undo.

翻译中…
  • If it is a set operation, a string $*a*_{*i*}$ and an integer $*x*_{*i*}$ follows $(1 ≤ *x*_{*i*} ≤ 10^{9})$. $*a*_{*i*}$ is the assignment that need to be set to priority $*x*_{*i*}$.
  • If it is a remove operation, a string $*a*_{*i*}$ follows. $*a*_{*i*}$ is the assignment that need to be removed.
  • If it is a query operation, a string $*a*_{*i*}$ follows. $*a*_{*i*}$ is the assignment that needs to be queried.
  • If it is a undo operation, an integer $*d*_{*i*}$ follows $(0 ≤ *d*_{*i*} < *i*)$. $*d*_{*i*}$ is the number of days that changes needed to be undone.
翻译中…

All assignment names $*a*_{*i*}$ only consists of lowercase English letters and have a length $1 ≤ |*a*_{*i*}| ≤ 15$.

翻译中…

It is guaranteed that the last operation is a query operation.

翻译中…

Output

翻译中…

For each query operation, output a single integer — the number of assignments that have a priority lower than assignment $*a*_{*i*}$, or $- 1$ if $*a*_{*i*}$ is not in the to-do list.

翻译中…

Interaction

翻译中…

If the operation is a $*query*$, you should output the result of the query and flush the output stream before proceeding to the next operation. Otherwise, you may get the verdict Idleness Limit Exceed.

翻译中…

For flushing the output stream, please refer to the documentation of your chosen programming language. The flush functions of some common programming languages are listed below:

翻译中…
  • C: fflush(stdout);
  • C++: cout « flush;
  • Java: System.out.flush();
翻译中…

样例

Input #1
8
set chemlabreport 1
set physicsexercise 2
set chinesemockexam 3
query physicsexercise
query chinesemockexam
remove physicsexercise
query physicsexercise
query chinesemockexam
Output #1
1
2
-1
1
InputCopy OutputCopy
Input #2
8
set physicsexercise 2
set chinesemockexam 3
set physicsexercise 1
query physicsexercise
query chinesemockexam
undo 4
query physicsexercise
query chinesemockexam
Output #2
0
1
0
-1
InputCopy OutputCopy
Input #3
5
query economicsessay
remove economicsessay
query economicsessay
undo 2
query economicsessay
Output #3
-1
-1
-1
InputCopy OutputCopy
Input #4
5
set economicsessay 1
remove economicsessay
undo 1
undo 1
query economicsessay
Output #4
-1
InputCopy OutputCopy
题目信息
题号
916D
时间限制
2 s
内存限制
512 MB
标签
数据结构
交互题
树

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。