Submission #6259733


Source Code Expand

#include<bits/stdc++.h>
using namespace std;

int read(){
	int a = 0; char c = getchar();
	while(!isdigit(c)) c = getchar();
	while(isdigit(c)){
		a = a * 10 + c - 48; c = getchar();
	}
	return a;
}

const int _ = 2e5 + 7;
int val[_] , cnt[_] , N;

bool cmp(int a , int b){return a > b;}

struct segTree{
	int mx[_ << 2];

	void init(){memset(mx , -0x3f , sizeof(mx));}

#define mid ((l + r) >> 1)
#define lch (x << 1)
#define rch (x << 1 | 1)

	void modify(int x , int l , int r , int tar , int val){
		if(l == r){mx[x] = val; return;}
		mid >= tar ? modify(lch , l , mid , tar , val) : modify(rch , mid + 1 , r , tar , val);
		mx[x] = max(mx[lch] , mx[rch]);
	}

	int qry(int x,  int l , int r , int L , int R){
		if(l >= L && r <= R) return mx[x];
		int Mx = -1e9;
		if(mid >= L) Mx = qry(lch , l , mid , L , R);
		if(mid < R) Mx = max(Mx , qry(rch , mid + 1 , r , L , R));
		return Mx;
	}
}T1 , T2;

bool check(int pos , int Mx1 , int Mx2 , int cnt1 , int cnt2){
	int V1 = cnt1 + cnt[pos] - cnt2 , V2 = cnt2 + cnt[pos] - cnt1;
	if(V1 >= 0)
		if(V1 & 1){if(T1.qry(1 , 1 , N , Mx2 , N) >= V1) return 1;}
		else if(T2.qry(1 , 1 , N , Mx2 , N) >= V1) return 1;
	if(V2 >= 0)
		if(V2 & 1){if(T1.qry(1 , 1 , N , Mx1 , N) >= V2) return 1;}
		else if(T2.qry(1 , 1 , N , Mx1 , N) >= V2) return 1;
	return 0;
}

int main(){
	N = read();
	int pre = 0;
	for(int i = 1 ; i <= N ; ++i){
		val[i] = read(); cnt[i] = val[i] > pre;
		pre = max(pre , val[i]);
	}
	for(int i = N ; i ; --i) cnt[i] += cnt[i + 1];
	T1.init();
	for(int i = N ; i ; --i){
		int p0 = T1.qry(1 , 1 , N , val[i] , N) , p1 = T2.qry(1 , 1 , N , val[i] , N);
		if(cnt[i] > cnt[i + 1]){
			T1.modify(1 , 1 , N , val[i] , p0 + 2);
			T2.modify(1 , 1 , N , val[i] , p1 + 2);
		}
		else{
			T1.modify(1 , 1 , N , val[i] , p1 + 1);
			T2.modify(1 , 1 , N , val[i] , p0 + 1);
		}
	}
	vector < int > arr1 , arr2; string s;
	int Mx1 = 1 , Mx2 = 1 , cnt1 = 0 , cnt2 = 0;
	for(int i = 1 ; i <= N ; ++i){
		T1.modify(1 , 1 , N , val[i] , -1e9);
		T2.modify(1 , 1 , N , val[i] , 0);
		if(check(i + 1 , max(Mx1 , val[i]) , Mx2 , cnt1 + (Mx1 <= val[i]) , cnt2)){
			arr1.push_back(val[i]); cnt1 += Mx1 <= val[i]; Mx1 = max(Mx1 , val[i]);
			s.push_back('0');
		}
		else{
			arr2.push_back(val[i]); cnt2 += Mx2 <= val[i]; Mx2 = max(Mx2 , val[i]);
			s.push_back('1');
		}
	}
	if(cnt1 == cnt2) cout << s;
	else cout << -1;
	return 0;
}

Submission Info

Submission Time
Task E - High Elements
User Itst
Language C++14 (GCC 5.4.1)
Score 1400
Code Size 2465 Byte
Status AC
Exec Time 166 ms
Memory 9720 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1400 / 1400
Status
AC × 4
AC × 58
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
All sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, subtask01-01.txt, subtask01-02.txt, subtask01-03.txt, subtask01-04.txt, subtask01-05.txt, subtask01-06.txt, subtask01-07.txt, subtask01-08.txt, subtask01-09.txt, subtask01-10.txt, subtask01-11.txt, subtask01-12.txt, subtask01-13.txt, subtask01-14.txt, subtask01-15.txt, subtask01-16.txt, subtask01-17.txt, subtask01-18.txt, subtask01-19.txt, subtask01-20.txt, subtask01-21.txt, subtask01-22.txt, subtask01-23.txt, subtask01-24.txt, subtask01-25.txt, subtask01-26.txt, subtask01-27.txt, subtask01-28.txt, subtask01-29.txt, subtask01-30.txt, subtask01-31.txt, subtask01-32.txt, subtask01-33.txt, subtask01-34.txt, subtask01-35.txt, subtask01-36.txt, subtask01-37.txt, subtask01-38.txt, subtask01-39.txt, subtask01-40.txt, subtask01-41.txt, subtask01-42.txt, subtask01-43.txt, subtask01-44.txt, subtask01-45.txt, subtask01-46.txt, subtask01-47.txt, subtask01-48.txt, subtask01-49.txt, subtask01-50.txt
Case Name Status Exec Time Memory
sample-01.txt AC 2 ms 4480 KiB
sample-02.txt AC 2 ms 4480 KiB
sample-03.txt AC 2 ms 4480 KiB
sample-04.txt AC 2 ms 4480 KiB
subtask01-01.txt AC 2 ms 4480 KiB
subtask01-02.txt AC 59 ms 6908 KiB
subtask01-03.txt AC 36 ms 5760 KiB
subtask01-04.txt AC 22 ms 5248 KiB
subtask01-05.txt AC 81 ms 7156 KiB
subtask01-06.txt AC 83 ms 7416 KiB
subtask01-07.txt AC 123 ms 9208 KiB
subtask01-08.txt AC 3 ms 4480 KiB
subtask01-09.txt AC 67 ms 7040 KiB
subtask01-10.txt AC 41 ms 6780 KiB
subtask01-11.txt AC 54 ms 6908 KiB
subtask01-12.txt AC 33 ms 5864 KiB
subtask01-13.txt AC 51 ms 6900 KiB
subtask01-14.txt AC 59 ms 7036 KiB
subtask01-15.txt AC 28 ms 5760 KiB
subtask01-16.txt AC 3 ms 4480 KiB
subtask01-17.txt AC 15 ms 5248 KiB
subtask01-18.txt AC 73 ms 7416 KiB
subtask01-19.txt AC 42 ms 6780 KiB
subtask01-20.txt AC 15 ms 5248 KiB
subtask01-21.txt AC 28 ms 5888 KiB
subtask01-22.txt AC 26 ms 5760 KiB
subtask01-23.txt AC 56 ms 6912 KiB
subtask01-24.txt AC 123 ms 9212 KiB
subtask01-25.txt AC 144 ms 9464 KiB
subtask01-26.txt AC 166 ms 9464 KiB
subtask01-27.txt AC 158 ms 9456 KiB
subtask01-28.txt AC 154 ms 9468 KiB
subtask01-29.txt AC 133 ms 9464 KiB
subtask01-30.txt AC 154 ms 9464 KiB
subtask01-31.txt AC 147 ms 9464 KiB
subtask01-32.txt AC 142 ms 9460 KiB
subtask01-33.txt AC 121 ms 9464 KiB
subtask01-34.txt AC 146 ms 9464 KiB
subtask01-35.txt AC 133 ms 9516 KiB
subtask01-36.txt AC 128 ms 9452 KiB
subtask01-37.txt AC 115 ms 9464 KiB
subtask01-38.txt AC 127 ms 9464 KiB
subtask01-39.txt AC 122 ms 9592 KiB
subtask01-40.txt AC 118 ms 9592 KiB
subtask01-41.txt AC 114 ms 9464 KiB
subtask01-42.txt AC 120 ms 9464 KiB
subtask01-43.txt AC 121 ms 9720 KiB
subtask01-44.txt AC 111 ms 9464 KiB
subtask01-45.txt AC 146 ms 9464 KiB
subtask01-46.txt AC 142 ms 9464 KiB
subtask01-47.txt AC 137 ms 9388 KiB
subtask01-48.txt AC 103 ms 9720 KiB
subtask01-49.txt AC 155 ms 9468 KiB
subtask01-50.txt AC 148 ms 9464 KiB