WA,只有3分,求条【玄一关】
查看原帖
WA,只有3分,求条【玄一关】
1170113
xuyifei0302楼主2024/12/1 16:40
#include<bits/stdc++.h>
using namespace std;
int t, n, a[1000005], minn[1000005], maxn[1000005], minn1[1000005], maxn1[1000005], ans[1000005], p[1000005], minnn[1000005], maxnn[1000005], minnn1[1000005], maxnn1[1000005], stmax[1000005], stmin[1000005], stmax1[1000005], stmin1[1000005];
signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while (t --) {
		cin >> n;
		for (int i = 1; i <= n; i ++) {
			cin >> a[i];
			p[i] = 0;
		}
		minn[0] = minn1[n + 1] = n + 1;
		maxn[0] = maxn1[n + 1] = 0;
		minnn[0] = minnn1[n + 1] = n + 1;
		maxnn[0] = maxnn1[n + 1] = 0;
		for (int i = 1; i <= n; i ++) {
			minn[i] = minn[i - 1];
			minnn[i] = minnn[i - 1];
			if (a[i] < minn[i]) {
				minnn[i] = minn[i];
				minn[i] = a[i];
			} else if (a[i] < minnn[i]) {
				minnn[i] = a[i];
			}
			maxn[i] = maxn[i - 1];
			maxnn[i] = maxnn[i - 1];
			if (a[i] > maxn[i]) {
				maxnn[i] = maxn[i];
				maxn[i] = a[i];
			} else if (a[i] > maxnn[i]) {
				maxnn[i] = a[i];
			}
		}
		for (int i = n; i >= 1; i --) {
			minn1[i] = minn1[i + 1];
			minnn1[i] = minnn1[i + 1];
			if (a[i] < minn1[i]) {
				minnn1[i] = minn1[i];
				minn1[i] = a[i];
			} else if (a[i] < minnn1[i]) {
				minnn1[i] = a[i];
			}
			maxn1[i] = maxn1[i + 1];
			maxnn1[i] = maxnn1[i + 1];
			if (a[i] > maxn1[i]) {
				maxnn1[i] = maxn1[i];
				maxn1[i] = a[i];
			} else if (a[i] > maxnn1[i]) {
				maxnn1[i] = a[i];
			}
		}
		for (int i = 1; i <= n; i ++) {
			stmin[i] = i - 1;
			while (stmin[i] && a[stmin[i]] > a[i]) {
				stmin[i] = stmin[stmin[i]];
			}
			stmax[i] = i - 1;
			while (stmax[i] && a[stmax[i]] < a[i]) {
				stmax[i] = stmax[stmax[i]];
			}
		}
		for (int i = n; i >= 1; i --) {
			stmin1[i] = i + 1;
			while (stmin1[i] && a[stmin1[i]] > a[i]) {
				stmin1[i] = stmin1[stmin1[i]];
			}
			stmax1[i] = i + 1;
			while (stmax1[i] && a[stmax1[i]] < a[i]) {
				stmax1[i] = stmax1[stmax1[i]];
			}
		}
		for (int i = 1; i <= n; i ++) {
			if (i % 2) {
				if (i == 1) {
					int rmin = stmin1[i], rmax = stmax1[i];
					if (rmin % 2) {
						rmin ++;
					}
					if (rmax % 2) {
						rmax ++;
					}
					p[i] |= (rmin <= n && minn1[rmin + 1] < a[i]);
					p[i] |= (rmax <= n && maxn1[rmax + 1] > a[i]);
//					ans[a[i]] = p[i];
//					continue;
				} else if (i == n) {
					int lmin = stmin[i], lmax = stmax[i];
					if (lmin % 2) {
						lmin --;
					}
					if (lmax % 2) {
						lmax --;
					}
					p[i] |= (lmin != 0 && minn[lmin - 1] < a[i]);
					p[i] |= (lmax != 0 && maxn[lmax - 1] > a[i]);
//					ans[a[i]] = p[i];
//					continue;
				} else {
//				p[i] |= ((minn[i - 1] < a[i] && minnn[i - 1] < a[i] && minn[i - 1] != minnn[i - 1]) || (maxn[i - 1] > a[i] && maxnn[i - 1] > a[i] && maxn[i - 1] != maxnn[i - 1])) && ((minn1[i + 1] < a[i] && minnn1[i + 1] < a[i] && minn1[i + 1] != minnn1[i + 1]) || (maxn1[i + 1] > a[i] && maxnn1[i + 1] > a[i] && maxn1[i + 1] != maxnn1[i + 1]));
					int lmin = stmin[i], lmax = stmax[i], rmin = stmin1[i], rmax = stmax1[i];
					if (lmin % 2) {
						lmin --;
					}
					if (lmax % 2) {
						lmax --;
					}
					if (rmin % 2) {
						rmin ++;
					}
					if (rmax % 2) {
						rmax ++;
					}
					p[i] |= (rmin <= n && minn1[rmin + 1] < a[i]) && (lmin != 0 && minn[lmin - 1] < a[i]);
					p[i] |= (rmax <= n && maxn1[rmax + 1] > a[i]) && (lmax != 0 && maxn[lmax - 1] > a[i]);
					p[i] |= (rmax <= n && maxn1[rmax + 1] > a[i]) && (lmin != 0 && minn[lmin - 1] < a[i]);
					p[i] |= (rmin <= n && minn1[rmin + 1] < a[i]) && (lmax != 0 && maxn[lmax - 1] > a[i]);
					p[i] |= (lmin != 0 && maxn[lmin - 1] > a[i] && rmin <= n && maxn1[rmin + 1] > a[i]);
					p[i] |= (lmax != 0 && minn[lmax - 1] < a[i] && rmax <= n && minn1[rmax + 1] < a[i]);
//				p[i] |= (minn1[i + 1] < a[i] && minnn1[i + 1] < a[i]);
//				p[i] |= (maxn[i - 1] > a[i] && maxnn[i - 1] > a[i]);
//				p[i] |= (maxn1[i + 1] > a[i] && maxnn1[i + 1] > a[i]);
				}
			} else {
				p[i] |= (minn[i - 1] < a[i] && minn1[i + 1] < a[i]);
				p[i] |= (maxn[i - 1] > a[i] && maxn1[i + 1] > a[i]);
			}
			ans[a[i]] = p[i];
		}
		for (int i = 1; i <= n; i ++) {
			cout << ans[i];
		}
		cout << "\n";
	}
	return 0;
}
2024/12/1 16:40
加载中...