问题 5570 --“势均力敌”的战斗

5570: “势均力敌”的战斗

时间限制: 3 Sec  内存限制: 256 MB
提交: 7  解决: 7
[提交][状态][命题人:]

题目描述

有一个竞技场和一些角斗士。初始竞技场上没有角斗士。

开始决斗后,竞技场上的角斗士会相互展开决斗,胜者留在竞技场上,败者淘汰,直到竞技场上只有一位角斗士为止。
如果角斗士 A 和角斗士 B 展开决斗,角斗士 A 的战斗力为 a ,角斗士 B 的战斗力为 b,若 a>b ,则角斗士 A 会留在场上;若 a<b ,则角斗士 B 会留在场上;若 a=b ,则角斗士 A 或 B 均有可能留在场上。由于战胜了对手积累了经验,留在场上的角斗士的战斗力变为 A+B 。

对于一场决斗来说,设双方战斗力为 a,b ,若 a≤2b 且 b≤2a ,则称之为“势均力敌”的战斗,会吸引更多观众观看。

现在竞技场的组织者,会有 q 次操作,每次操作会向竞技场中派入一名指定战斗力的角斗士,或让一名指定战斗力的角斗士离开。这些操作均在开始决斗之前。
你需要求出每次操作后,若马上开始进行相互决斗,则最多会有多少场“势均力敌”的战斗。

输入

第一行输入一个正整数 q (1≤q≤5·10^5) ,表示操作数。
接下来 q 行,每行表示一个操作。每行包含一个字符 op 和一个正整数 x :
若 op='+' ,则表示向竞技场中派入一名战斗力为 x 的角斗士。
若 op='-' ,则表示让一名战斗力为 x 的角斗士离开竞技场。保证此时竞技场内至少有一名战斗力为 x 的角斗士。

输出

对于每次操作,输出一行包含一个整数,表示最多的“势均力敌”战斗数。
样例输入
Copy
样例1:
2
+ 1
- 1

样例2:
4
+ 1
+ 3
+ 7
- 3

样例3:
9
+ 2
+ 2
+ 12
- 2
- 2
+ 4
+ 1
+ 1
- 12
样例输出
Copy
样例1:
0
0

样例2:
0
0
1
0

样例3:
0
1
1
0
0
0
0
3
2

提示

在第三组样例中,在执行了所有操作之后,竞技场内的角斗士战斗力集合为 {1,1,4} 。他们开始相互决斗后,有几种可能的情况:

1. 战斗力为 4 的角斗士与战斗力为 1 的角斗士进行决斗,战斗力变为 5 。然后其再与战斗力为 1 的角斗士决斗。在这种情况下,没有一场战斗是“势均力敌”的。
2. 战斗力为 1 的角斗士与战斗力为 1 的角斗士进行“势均力敌”的决斗,战斗力变为 2 。然后其再与战斗力为 4 的角斗士进行“势均力敌”的决斗。在这种情况下,“势均力敌”的战斗的总数将是 2 。

因此,最多有 2 场“势均力敌”的战斗。

来源

[提交][状态]