CD 79 一种消息接收并打印的结构设计

题目描述
已知一个消息流会不断地吐出整数1 \sim N1∼N,但不一定按照顺序吐出。如果上次打印的数为i,那么当i+1出现时,请打印i+1及其之后接收过的并且连续的所有数,直到1 \sim N1∼N全部接收并打印完,请设计这种接收并打印的结构
[要求]
消息流最终会吐出全部的1 \sim N1∼N,当然最终也会打印完所有的1\sim N1∼N,要求接收和打印1 \sim N1∼N的整个过程,时间复杂度为O(N)O(N)。
输入描述:
第一行一个整数N。

接下来一行有N个整数。保证输入是一个1到N的排列
输出描述:
输出N行,每行两个数。

为了检验输出的正确性,请在输出当前打印的数字之后输出此时最后一个加入的元素。

具体看输入输出样例
示例1
输入
复制
9
2 1 4 5 7 3 9 8 6
输出
复制
1 1
2 1
3 3
4 3
5 3
6 6
7 6
8 6
9 6
说明
消息流吐出2,一种结构接收而不打印2,因为1还没出现。
消息流吐出1,一种结构接收1,并且打印:1, 2。
消息流吐出4,一种结构接收而不打印4,因为3还没出现。
消息流吐出5,一种结构接收而不打印5,因为3还没出现。
消息流吐出7,一种结构接收而不打印7,因为3还没出现。
消息流吐出3,一种结构接收3,并且打印:3, 4, 5。
消息流吐出9,一种结构接收而不打印9,因为6还没出现。
消息流吐出8,一种结构接收而不打印8,因为6还没出现。
消息流吐出6,一种结构接收6,并且打印:6, 7, 8, 9。

 #include<iostream>
 #include<stdio.h>
 #include<algorithm>
 using namespace std;
 
bool a[100007];
 int main()
 {
 	int min_a=1;
 	int n,x;
 	scanf("%d",&n);
 	for(int i=0;i<n;i++)
	 {
	 	scanf("%d",&x);
	 	a[x]=true;
	 	if(x==min_a)//可以输出 
		 {
		 	int k=x;
			while(a[k])
			{
				cout<<k++<<" "<<min_a<<endl;
			} 
			min_a=k;
		 }
	 }
 	return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值