タイトル1512:キュー&&min関数を含むスタックを2つのスタックで実現する

2385 ワード

タイトルの説明:
2つのスタックで1つのキューを実現し、キューのPushとPop操作を完了します.キュー内の要素はintタイプです.
入力:
各入力ファイルには、テストサンプルが含まれています.各テストサンプルについて、最初の行には、キュー操作の個数を表すn(1<=n<=10000000)が入力される.次のn行、各行にキュー操作を入力:1.PUSH Xはキュー内のpushの整数x(x>=0)2.POPがキューからpopする数.
出力:
各テストケースに対応して、すべてのpop操作のキューpopからの数値を印刷します.pop操作を実行するときにキューが空の場合は、-1を印刷します.
サンプル入力:
3
PUSH 10
POP
POP
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

int s1[100001],s2[100001];
int top1,top2;

int pop(){
	if(top2 < 0){
		while(top1 >= 0)
			s2[++top2] = s1[top1--];
	}
	if(top2 < 0)
		return -1;
	else
		return s2[top2--];
}

int main(int argc, char const *argv[])
{
	int n,x;
	char op[4];
	while(scanf("%d",&n) != EOF){
		top1 = top2 = -1;
		for(int i = 0;i < n;i++){
			scanf("%s",op);
			if(!strcmp(op,"PUSH")){
				scanf("%d",&x);
				s1[++top1] = x;
			}
			if(!strcmp(op,"POP"))
				printf("%d
",pop()); } } return 0; }

サンプル :
10
-1

タイトルの :
スタックのデータ を します.スタックの を るmin をこのタイプで してください.
:
には のテストサンプルが まれ、 はEOFで します. テストケースについて、 された 1の は n(1<=n<=1000000)であり、nは する のステップ を す. にn があり、 に1 Ciが まります.Ci=’s’の 、kをスタックに し むことを す kが く.Ci=’o’の 、スタックトップ がポップアップされます.
:
テストケースの に し、スタックが でない は、 するスタックの を します.そうでなければNULLを します.
サンプル :
7
s 3
s 4
s 2
s 1
o
o
s 0

サンプル :
3
3
2
1
2
3
0
#include <cstdio>
#include <iostream>
#include <list>
#include <stack>
#include <algorithm>
using namespace std;

stack<int> s1,s2;

int main(int argc, char const *argv[])
{
	int n,x;
	char s[3];
	while(scanf("%d",&n) != EOF){
		while(n--){
			scanf("%s",s);
			if(s[0] == 's'){
				scanf("%d",&x);
				if(s2.empty() || (s2.top() > x)){
					s2.push(x);
				}else
					s2.push(s2.top());
				s1.push(x);
			}
			else{
				if(!s1.empty()){
					s1.pop();
					s2.pop();
				}else{
					printf("NULL
"); continue; } } if(!s1.empty()) printf("%d
",s2.top()); else printf("NULL
"); } } return 0; }