STL全TLE
查看原帖
STL全TLE
553640
Konjac0629楼主2023/8/20 16:09

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;
}
2023/8/20 16:09
加载中...