栈排序

栈和排序

https://ac.nowcoder.com/acm/problem/14893

//#include <bits/stdc++.h>
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
//INT_MAX 32 bit int
//LLONG_MAX 64 bit int
//LONG_MAX 64 bit int

using namespace std;

//#pragma comment(linker, "/STACK:3073741824")
#define _SILENCE_CXX20_CISO646_REMOVED_WARNING
#pragma warning(disable : 4996)
#define memmin(a) memset(a,0,sizeof(a))
#define memmax(a) memset(a,0x3f,sizeof(a));
#define memmove(dest,source) memmove(dest,source,sizeof dest);
#define memcpy(dest,source) {memcpy(dest, source, sizeof dest-1);dest[sizeof(dest)-1]='\0';}
#define fspr(n) fixed << setprecision(n)
#define spr(n) setprecision(n)
#define sci setiosflags(ios::scientific)
#define siosf setiosflags
#define endll '\n'
#define ifor(i, l, r) for (long long (i) = (l); (i) <= (r); ++(i))
#define rfor(i, r, l) for (long long (i) = (r); (i) >= (l); --(i))
#define fori(i,l,r) for(auto i=l;i!=r;++i)
#define rfori(i,r,l) for(auto i=r;i!=l;--i)
#define coute cout<<'\n'
typedef long long ll;
typedef pair<int, int> P;
typedef unsigned long long ull;

template <class T, class Container = vector<T>,
	class Compare = less<typename Container::value_type> >
using priqueue = priority_queue<T, Container, Compare>;

#define start
#ifdef start
namespace cus {
	constexpr int IINF = 0x3f3f3f3f;
	constexpr long long LINF = 0x3f3f3f3f3f3f3f3f;
	constexpr double EPS = 1.0e-9;
	constexpr long long MOD = 1e9 + 7;
	constexpr int INF1 = 1e5 + 100;
	constexpr ll INF2 = 1e7 + 100;
	template <typename T>
	constexpr T PI = T(3.1415926535897932385);

	//__int128读取
	void  read128(ll& w) {
		w = 0;
		ll f = 1;
		char ch = getchar();
		while (ch < '0' || ch > '9') {
			if (ch == '-')
				f = -1;
			ch = getchar();
		}
		while (ch <= '9' && ch >= '0') {
			w = w * 10 + ch - '0';
			ch = getchar();
		}
	}
	//__int 128 output
	void print128(ll x) {
		if (x < 0) {
			putchar('-');
			x = -x;
		}
		if (x > 9)print128(x / 10);
		putchar(x % 10 + '0');
	}

	//stand print
	template<typename container>
	void print(container& a2) {
		for (auto i = a2.begin(); i != a2.end(); i++) {
			if (i == a2.begin()) cout << *i;
			else
				cout << " " << *i;
		}
	}

	template<typename T1>
	auto print(T1 a1, ll l, ll r) ->void {
		for (ll i = l; i <= r; ++i) {
			if (i == l) cout << a1[i];
			else cout << " " << a1[i];
		}

	}
}
#endif

//core code

template <typename T>
constexpr T detal(ll x)
{

}

stack<int> das;
int a[cus::INF2];
int maxn[cus::INF2] ;
list<int> sav;
//solution call by mian 
void solved()
{
	int n;
	cin >> n;
	int pos = -1;
	ifor(i, 0, n - 1)
	{
		cin >> a[i];
		if (a[i] == n) pos = i;
	}
	maxn[n] = -1;
	rfor(i, n - 1, 0)
	{
		maxn[i] = max(maxn[i + 1], a[i]);
        //i个元素及其之后所有元素中的最大值
		
	}
	/*cus::print(maxn, 0, n - 1);
	return;*/
	int j = 0;
	int _max = n;
	ifor(i, 0, n - 1)
	{
		das.push(a[i]);
        
        //当栈顶元素大于剩下未入栈元素的最大值的时候,这个元素就应该出栈
		while (!das.empty() && das.top() > maxn[i + 1])
		{
			sav.push_back(das.top());
			das.pop();
		}
	}
	cus::print(sav);
	if (!das.empty())
	{
		while (!das.top())
		{
			cout << " " << das.top();
			das.pop();
		}
	}
	return;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin.tie(nullptr);
	solved();
	return 0;
}
全部评论

相关推荐

01-14 12:08
门头沟学院 Java
神哥了不得:(非引流)1.既然发出来了简历,就稍微提一点点小建议,确实简历很不错了,练手项目可以换一些质量高的,工作内容,可以加上一些量化指标,比如第一条系统响应速度由多少变成多少,减少了百分之多少,第4条就很不错。2.广投,年前实习招募比较少了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务