RT,大佬们看看哪里还需要优化
#include <bits/stdc++.h>
using namespace std;
multiset<int> fakeTree;
int calcNumRank(int num)
{
return distance(fakeTree.begin(), fakeTree.find(num)) + 1;
}
int findNumByPos(int pos)
{
auto it = fakeTree.begin();
advance(it, pos);
return *it;
}
int findNumPre(int num)
{
int rank=calcNumRank(num);
if(rank<1)
return -2147483647;
else
return findNumByPos(rank-2);
}
int findNumBehind(int num)
{
int Behind=findNumByPos(*(fakeTree.lower_bound(num)));
if(Behind==num)
return 2147483647;
else
return Behind;
}
void insertNum(int num)
{
fakeTree.insert(num);
}
int main()
{
insertNum(-2147483647);
insertNum(2147483647);
int q;
cin >> q;
for (int i = 0; i < q; i++)
{
int op, num;
cin >> op >> num;
switch (op)
{
case 1:
cout << calcNumRank(num) << endl;
break;
case 2:
cout << findNumByPos(num - 1) << endl;
break;
case 3:
cout << findNumPre(num) << endl;
break;
case 4:
cout << findNumBehind(num) << endl;
break;
case 5:
insertNum(num);
break;
default:
break;
}
}
return 0;
}