**第一题**
题目描述
你需要维护一个集合,有n次操作,支持:
插入一个非负整数x。
删除一个非负整数x。
查询集合中是否存在非负整数x,如果存在则输出 yes,否则输出 no。
给定非负整数x,查询集合中>=x的数中最小的一个并输出,如果这个数不存在,则输出 -1。
给定非负整数x,查询集合中>x的数中最小的一个并输出,如果这个数不存在,则输出 -1。
给定非负整数x,查询集合中<=x的数中最大的一个并输出,如果这个数不存在,则输出 -1。
给定非负整数x,查询集合中<x的数中最大的一个并输出,如果这个数不存在,则输出 -1。
集合中不允许有重复数字,所以当你尝试插入一个已经存在于集合中的数字时,该操作会被忽视掉。
输入格式
第一行一个整数n。
之后n 行每行两个数 opt,x 表示一次操作,操作格式如下:
1 x:表示插入x。
2 x:表示删除x。
3 x:表示集合中是否存在x,如果存在则输出 yes,否则输出 no。
4 x:表示查询集合中>=x的数中最小的一个并输出,如果这个数不存在,则输出 -1。
5 x:表示查询集合中>x的数中最小的一个并输出,如果这个数不存在,则输出 -1。
6 x:表示查询集合中<=x的数中最大的一个并输出,如果这个数不存在,则输出 -1。
7 x:表示查询集合中<x的数中最大的一个并输出,如果这个数不存在,则输出 -1。
输出格式
对每个询问,输出一行表示答案。
样例 #1
样例输入 #1
20
1 17
1 16
1 2
1 1
1 10
4 15
2 9
1 18
2 9
7 16
2 0
2 3
4 2
2 3
2 5
5 3
3 11
6 14
1 13
3 17
样例输出 #1
16
10
2
10
no
10
yes
提示
对于30% 的数据,n<=1000。
对于10%的数据,没有2操作。
对于10%的数据,没有3操作。
对于10%的数据,没有4 操作。
对于10%的数据,没有5操作。
对于10%的数据,没有6操作。
对于10% 的数据,没有7操作。
对于100%的数据,n<=5*10^5,所有输入的数都在[0,n-1]之间。
**第二题**
题目描述
n个人坐成一圈打牌,第i个人开始时手中有ai张牌。
从第一个人开始,每个人轮流选择出牌。轮到某个人选择出牌时,他可以选择出一张牌,也可以选择不出牌。不过,如果上一个出牌的人是他自己,或者从来没有人出过牌,那么他就必须选择出牌。然后轮到他的下一个人选择出牌,n的下一个人是1。如果有一个人出完了他所有的牌,游戏结束。
你需要求出,游戏最多能进行多少回合。一个人一次选择叫做一回合。
输入格式
第一行包括一个整数n。
第二行n个整数,第i个表示ai。
样例 #1
样例输入 #1
2
2 2
样例输出 #1
4
样例 #2
样例输入 #2
11
11 4 5 1 4 1 9 1 9 8 10
样例输出 #2
563
样例 #3
样例输入 #3
2
100 1
样例输出 #3
199
提示
样例一解释:
第一回合1必须出牌。
第二回合2 选择出牌。
第三回合1选择不出牌。
第四回合2必须出牌,他的牌出完了,游戏结束。
共进行了4回合,容易发现没有回合数更多的方案。
对于前30%的数据,n=2,ai<=10。
对于前60%的数据,n<=10,ai<=10。
对于前95%的数据,n<=10^5,ai<=10^4。
对于全部数据,2<=n<=10^5,1<=ai<=10^9。
急!感谢回答的lao师!