在本题中,你需要维护一个数据结构,完成平衡搜索树的几种操作。
1 x
2 x
3 x
4 x
-1
请注意:
0
sum-1
如果你不注意以上两点,你的代码可能会得到错误的结果。
本题目输入数据量较大,输入数据采取如下方式生成:
输入仅有一行,包含444个整数:m seed vmax per 分别代表操作数,随机数种子,xxx的上限,操作1,21,21,2所占比例。
m seed vmax per
你应该按照如下方式完成程序:
#include<iostream> //include headfiles you need using namespace std; typedef unsigned int unit; int m, vmax, per; unit seed; unit rnd(unit& seed) { seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed << 5; return seed; } //you do it... int main() { //!insert 0 int sum = 1; cin >> m >> seed >> vmax >> per; for (int i = 1; i <= m; i++) { int op = rnd(seed) % 100 + 1; if (op <= per) { int x = rnd(seed) % vmax + 1; if (op % 2 == 0) { //finish op 1 ++sum; } else { //finish op 2 //--sum if x is exists } } else { if (op % 2 == 0) { int x = rnd(seed) % sum + 1; //finish op 3 } else { int x = rnd(seed) % vmax + 1; //finish op 4 } } } return 0; }
对于每次操作333或操作444输出一行数字表示答案。
输入样例:
10 521 10 50
输出样例:
-1 0 -1 10
样例解释: 样例111的所有操作为:
1 10 4 4 2 6 1 9 3 1 2 10 4 1 1 10 2 7 3 3
数据范围: 对于全部的数据, 1≤m≤1071\leq m \leq 10^71≤m≤107 , 1≤seed≤1091\leq seed \leq 10^91≤seed≤109 ,1≤vmax≤5×1051\leq vmax\leq 5\times10^51≤vmax≤5×105 , 95≤per≤10095\leq per \leq 10095≤per≤100 。
注:尽管样例的per=50,这只是为了更好地展示数据的生成方式,所有测试点中的数据全部是合法的。
per=50
请注意此题较为特殊的时间限制。