https://www.acmicpc.net/problem/1874
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main()
{
int size;
cin >> size;
stack<int> s;
vector<char> v;
int *ans = new int[size];
int *src = new int[size];
for(int i = 1; i <= size; i++)
{
cin >> ans[i - 1];
src[i - 1] = i;
}
int i = 0;
int j = 0;
while(j < size)
{
if(ans[i] > src[j])
{
s.push(src[j]);
v.push_back('+');
j++;
}
else if(ans[i] == src[j])
{
v.push_back('+');
v.push_back('-');
j++;
i++;
}
else if(ans[i] < src[j])
{
if(ans[i] == s.top())
{
v.push_back('-');
s.pop();
i++;
}
else
{
cout << "NO" << '\n';
return 0;
}
}
}
for(int k = i; k < size; k++)
{
if(ans[k] != s.top())
{
cout << "NO" << endl;
return 0;
}
v.push_back('-');
s.pop();
}
for(int x = 0; x < v.size(); x++)
{
cout << v[x] << '\n';
}
delete [] ans;
delete [] src;
}