Я только что кое-что узнал о структурах данных на основе политик GNU.Но я получил неожиданный результат по этому вопросу: (оригинальная версия описана на китайском языке, поэтому я перевел ее.)
Вам нужно написать структуру данных, которая поддерживает следующие операции:
- номер вставки
x
- номер удаления
x
- поиск номера
x
порядок («порядок» относится к числу элементов, меньших, чем это число+1) - поиск номера, порядок которого
x
- поиск номера
x
префикс - поиск номера
x
'суффикс s
#include <iostream>
#include <vector>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <set>
using namespace std;
using ost = __gnu_pbds::tree<
int,
__gnu_pbds::null_type,
less<int>,
__gnu_pbds::rb_tree_tag,
__gnu_pbds::tree_order_statistics_node_update>;
int a;
int main() {
ost s;
int n;
cin>>n;
int opnum;
ost::iterator i;
for(int j=1;j<=n;j++)
{
cin>>opnum;
switch(opnum)
{
case 1:
cin>>a;
s.insert(a);
break;
case 2:
cin>>a;
s.erase(a);
break;
case 3:
cin>>a;
cout<<s.order_of_key(a)+1<<endl;
break;
case 4:
cin>>a;
cout<<*s.find_by_order(a-1)<<endl;
break;
case 5:
cin>>a;
i=s.lower_bound(a);
--i;
while(a<=*i)
--i;
cout<<*i<<endl;
break;
case 6:
cin>>a;
cout<<*(s.upper_bound(a))<<endl;
break;
}
/*
for(auto i:s)
{
cout<<"\t"<<i<<endl;
}
*/
}
return 0;
}
Но принимаются только 55% точек данных.А в неправильном ответе баллов проблемы возникают после сотен строк.Так что это должно быть очень маленькой проблемой.Вы можете понять это?Я был бы очень признателен.
Что я знаю о неожиданном результате, так это то, что он обычно превышает ожидаемый результат.Но в какой-то момент требуется 7
при выводе программы 6
.так что я действительно запутался.Я даже не знаю, в какой дозе case
возникает проблема.
Кроме того, точка данных гарантированно верна.Я проверил это самостоятельно, написав Treap
.
РЕДАКТИРОВАТЬ
диапазон данных:
предел операций: 100000 раз числовой предел: каждое число находится в [-10000000, 10000000]