我刚刚学到了一些基于GNU策略的数据结构。但是我在这个问题上得到了一些意想不到的结果:(原版用中文描述,所以我翻译过了。)
您需要编写支持以下操作的数据结构:
x
x
x
的订单(“订单”指的是小于此号码的元素数量+ 1)x
x
的前缀x
的后缀 #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]
中