天天看点

【cf 1144G】贪心选择一下

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("");
    }
  }
}