1.题目链接。题目大意:给定一个序列,这个序列可能是由一个严格单调递增,一个严格单调递减的序列组成。把这两个序列找出来,如果找不出来,输出NO,找出来输出Yes并把分组信息输出。
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, a1[N];
#pragma warning(disable:4996)
vector<int>A, B;
int used[N];
const int INF = 1e9;
int main()
{
while (cin >> n)
{
A.clear();
B.clear();
memset(used, 0, sizeof(used));
A.push_back(-1);
B.push_back(INF);
for (int i = 1; i <=n; i++)
{
cin >> a1[i];
}
for (int i = 1; i <= n; i++)
{
int x = a1[i];
int a = A.back();
int b = B.back();
if (x <= a && x >= b)
{
puts("NO");
return 0;
}
else if (x > a&&x < b)
{
if (i == n)
used[i] = 1;
else
{
int y = a1[i + 1];
if (y > x)
{
A.push_back(x);
}
else
{
B.push_back(x);
used[i] = 1;
}
}
}
else if(x>a)
{
A.push_back(x);
}
else
{
B.push_back(x);
used[i] = 1;
}
}
puts("Yes");
for (int i = 1; i <= n; i++)
{
cout << used[i] << " ";
if (i == n)puts("");
}
}
}