巴蜀1322 第k小的数

Description

  现在已有N个整数,你有以下三种操作:
1 A:表示加入一个值为A的整数;
2 B:表示删除其中值为B的整数;
3 K:表示输出这些整数中第K小的数;

Input

第一行,两个整数N,M,表示最开始有N个整数,总共有M个操作
第二行用空格隔开的N个整数
接下来M行,每行表示一个操作

Output

若干行,一行一个整数,表示所求的第K小的数字



平衡树模板题。





#include<cstdio>
#include<cstdlib>
struct node
{
	int size,x,v,k[2];
}t[3100000];
int root,size;
void up(int p)
{
	t[p].size=t[t[p].k[0]].size+t[t[p].k[1]].size+1;
}
void rot(int &p,bool b)
{
	int x=t[p].k[b];
	int y=t[x].k[!b];
	t[p].k[b]=y;
	t[x].k[!b]=p;
	up(p);
	up(x);
	p=x;
}
void ins(int &p,int x)
{
	if (p==0)
	{
		p=++size;
		t[p].x=x;
		t[p].v=rand();
		t[p].size=1;
		return;
	}
	if (t[p].x==x) return;
	bool b=x>t[p].x;
	ins(t[p].k[b],x);
	up(p);
	if (t[t[p].k[b]].v>t[p].v)
	  rot(p,b);
}
void del(int &p,int x)
{
	if (p==0) return;
	if (t[p].x==x)
	{
		if (t[p].k[0]==0&&t[p].k[1]==0)
		{
			p=0;
			return;
		}
		bool b=t[t[p].k[0]].v<t[t[p].k[1]].v;
		rot(p,b);
		del(t[p].k[!b],x);
		up(p);
	}
	del(t[p].k[x>t[p].x],x);
	up(p);
}
int find(int p,int x)
{
	if (p==0) return 0;
	if (t[t[p].k[0]].size>=x) return find(t[p].k[0],x);
	if (t[t[p].k[0]].size+1==x) return t[p].x;
	return find(t[p].k[1],x-t[t[p].k[0]].size-1);
}
int main()
{
	int m,n,i,j,k,x,y,z;
	scanf("%d%d",&n,&m);
	for (i=1;i<=n;i++)
	{
		scanf("%d",&x);
		ins(root,x);
	}
	for (i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		if (x==1) ins(root,y);
		if (x==2) del(root,y);
		if (x==3) printf("%d\n",find(root,y));
	}
}


在这个三国佚事中,诸葛亮为了应对蜀国战事紧急,彻夜写了安排书信,并交给送信小厮。然而,这个小厮却投靠了曹操,故意将书信都投错了烽火台,没有一封是正确的。这让诸葛亮非常着急,因为错误的书信传错会导致蜀军自乱阵脚,不攻自破。现在,诸葛亮想知道被小厮传错的书信共有多少种情况。 根据引用提供的代码,我们可以看到这道题目是一个学题,通过计算书信传错的情况。具体来说,代码中的函f(n)计算了传错n封书信的情况。根据代码中的递推关系,我们可以得出结果。 输入样例:3 输出样例:2 所以,传错3封书信共有2种情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [F - 三国佚事——巴蜀之危](https://blog.csdn.net/qq_39173848/article/details/123140310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [7-7 三国佚事——巴蜀之危 (20 分)](https://blog.csdn.net/Zero_hunter_kill/article/details/124286092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值