https://www.luogu.org/problem/P3369
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> tr;
int main()
{
int n,op;ll x,ans;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%lld",&op,&x);
if(op==1)
tr.insert((x<<20)+i);
if(op==2)
tr.erase(tr.lower_bound(x<<20));
if(op==3)
printf("%d\n",tr.order_of_key(x<<20)+1);
if(op==4)
{
ans=*tr.find_by_order(x-1);
printf("%lld\n",ans>>20);
}
if(op==5)
{
ans=*--tr.lower_bound(x<<20);
printf("%lld\n",ans>>20);
}
if(op==6)
{
ans=*tr.upper_bound((x<<20)+n);
printf("%lld\n",ans>>20);
}
}
return 0;
}
本文介绍了一种使用C++中的PBDS(Persistent Boost Data Structures)库实现树状数组的高级方法,用于解决洛谷P3369问题。通过结合左移右移操作和树状数组特性,该方法能够高效处理插入、删除、查找排名、前驱、后继等操作。
1598

被折叠的 条评论
为什么被折叠?



