社区讨论

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 条回复,欢迎继续交流。

正在加载回复...