【__gnu_pbds】如何让pbds的平衡树支持重复元素
查看原帖
【__gnu_pbds】如何让pbds的平衡树支持重复元素
206814
封禁用户楼主2022/7/22 15:22

大概就是这道题,不处理重复元素的话只有52pts,所以如何处理重复元素?

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define I64 "%d"
__gnu_pbds::tree<int, __gnu_pbds::null_type, std::less<int>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update> data;
signed main(){
	int n;
	scanf(I64, &n);
	for(int i = 1; i <= n; i++){
		int op, x;
		scanf(I64 I64, &op, &x);
		if(op == 1){
			data.insert(x);
		}else if(op == 2){
			data.erase(x);
		}else if(op == 3){
			printf(I64 "\n", data.order_of_key(x) + 1);
		}else if(op == 4){
			printf(I64 "\n", *data.find_by_order(x - 1));
		}else if(op == 5){
			printf(I64 "\n", *data.find_by_order(data.order_of_key(x) - 1));
		}else{
			printf(I64 "\n", *data.find_by_order(data.order_of_key(x)));
		}
	}
	return 0;
}

我觉得大概是用pair<int,int>这种东西,但是具体不清楚,麻烦大佬帮忙改下

2022/7/22 15:22
加载中...