桃桃还就那个凉凉

这道题目诡异在时间复杂度上卡你,sort函数为nlongn级别,n组测试数据也就是n方longn级别,>1e9,考场上没想出别的来,太呆。想到时间复杂度卡你,那就用空间换时间,留着优先队列和queue,该排列就排列,该按顺序如对就按顺序入,只不过需要记录下当前队列从第几个数字开始才是合法的。

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std  ;
int idx ,daxiao;
const int N =1e6+7;
int q [N];
int main()
{    
     priority_queue<int ,vector<int>,greater<int > >st ;
	int t; 
	scanf("%d",&t);
	while(t--)
	{
		int a, b ;
		scanf("%d",&a);
		if(a==1)
		{
			scanf("%d",&b);
			q[daxiao++]=b;
		}
		if(a==2)
		{
			if(st.size())
			{
				int zhi = st.top();
				st.pop();
				printf("%d\n",zhi);
			}
			else 
			{
				printf("%d\n",q[idx++])**;//idx是指数组下标idx及之后的位是没有经过排序的。可用!**
			}
		}
		if(a==3)
		{   //这样子也就避免了重新排序,一直是线性操作,为了时间牺牲空间 
			while(idx<daxiao)
			{
				int tem= q[idx];
			    st.push(tem);
				idx++;
			}
		} 
	}
	return 0 ;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值