暴力判断,大于a[x]的标记为1,判断1和0的个数,如果一样就true,不过不一样就看看能不能通过删除多的来使他们相等,三个相等的情况可以删,还有11011这种,因为你可以先删除11011中的011中的01变成111,再删除11,所以等价于删除两个1,因为1和0奇偶性相同,所以每次删2,看看最后能不能使他们相等就好了。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define LL long long
#define N 100010
int a[N], vis[N];
int n;
bool juge(int x)
{
int f0 = 0, f1 = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] > a[x])f1++, vis[i] = 1;
else if (a[i] < a[x])f0++, vis[i] = 0;
}
if (f0 == f1)return true;
int flag, ans;
if (f1 > f0)flag = 1, ans = f1 - f0;
else flag = 0, ans = f0 - f1;
int cnt = 0;
for (int i = 1; i < x; i++)
{
if (vis[i] == flag)cnt++;
else cnt = max(cnt - 1, 0);
if (cnt == 3) ans -= 2, cnt = 1;
}
cnt = 0;
for (int i = x + 1; i <= n; i++)
{
if (vis[i] == flag)cnt++;
else cnt = max(cnt - 1, 0);
if (cnt == 3) ans -= 2, cnt = 1;
}
if (ans <= 0)return true;
return false;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
for (int i = 1; i <= n; i++)
{
if (juge(i))printf("1");
else printf("0");
}
cout << endl;
}
return 0;
}