社区讨论
pb_ds 求调
P3369【模板】普通平衡树参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjsilqxt
- 此快照首次捕获于
- 2025/12/30 19:39 2 个月前
- 此快照最后确认于
- 2026/01/02 16:05 2 个月前
四个最大点 WA。
CPP#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;
#define int long long
tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>s;
map<int,int>mp;
int hs(int x){return (x<<32)+mp[x];}
signed main()
{
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,q;cin>>n;
// for(int i=1,x;i<=n;i++)cin>>x,s.insert(x);
while(n--)
{
int op,x;cin>>op>>x;
if(op==1)mp[x]++,s.insert(hs(x));
if(op==2)s.erase(hs(x));
if(op==4)
{
auto it=s.find_by_order(x-1);
if(it==s.end())cout<<-1<<'\n';
else cout<<((*it)>>32)<<'\n';
}
if(op==3)
{
x<<=32;
auto it=s.upper_bound(x);
if(it==s.end())cout<<s.size()<<'\n';
else
{
int num=*it,id=s.order_of_key(num);
// cout<<"get"<<(num>>32)<<'\n';
cout<<id+1<<'\n';
}
}
if(op==5)
{
x<<=32;
auto it=s.lower_bound(x);
// cout<<"get"<<*it<<'\n';
if(it==s.begin())cout<<-1<<'\n';
else it--,cout<<((*it)>>32)<<'\n';
}
if(op==6)
{
int xx=x;
x<<=32;x+=mp[xx];
auto it=s.upper_bound(x);
if(it==s.end())cout<<-1<<'\n';
else cout<<((*it)>>32)<<'\n';
}
// for(auto i:s)cout<<(i>>32)<<' ';cout<<'\n';
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...