Submission #2197052


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <string>
using namespace std;

int INF = 1000000000;

class SegmentTree {
public:
	vector<int>dat; int size_ = 1;
	
	void init(int sz) {
		while (size_ < sz) size_ *= 2;
		dat.resize(size_ * 2, INF);
	}
	void update(int pos, int a) {
		pos += size_;
		dat[pos] = a;
		while (pos >= 2) {
			pos /= 2;
			dat[pos] = min(dat[pos * 2], dat[pos * 2 + 1]);
		}
	}
	vector<int>query_(int a, int u) {
		if (dat[u] > a) return vector<int>{};
		if (u >= size_) return vector<int>{u - size_};
		vector<int>V1 = query_(a, u * 2);
		vector<int>V2 = query_(a, u * 2 + 1);
		vector<int>V3 = V1;
		for (int i = 0; i < V2.size(); i++) V3.push_back(V2[i]);
		return V3;
	}
	vector<int>query(int a) {
		return query_(a, 1);
	}
};

int N, A[100009], C[100009], E[300009]; string S;

int solve(int U) {
	for (int i = 1; i <= N; i++) {
		if (A[i] >= U) C[i] = 1; else C[i] = 0; E[i] = 0;
	}
	SegmentTree X1, X2; set<int> L1, R1, L2, R2;
	X1.init(N + 3); X2.init(N + 3);

	int s = -1;
	for (int i = 1; i <= N + 1; i++) {
		if (C[i] == 1 && s == -1) s = i;
		if (C[i] == 0 && s != -1) {
			X1.update(s, i - s); L1.insert(-s); R1.insert(s);
			s = -1;
		}
	}
	int ss = (1 << 30);
	for (int i = 1; i <= N; i++) {
		if (C[i] == 0 && ss == -1) ss = i;
		if (C[i] == 1 && ss != -1) {
			if (ss != (1 << 30)) { X2.update(ss, i - ss); L2.insert(-ss); R2.insert(ss); }
			ss = -1;
		}
	}
	int len = 0, sum = 0;
	for (int i = 0; i < S.size(); i++) {
		if (S[i] == 'M') {
			len++; sum++;
			vector<int>F = X2.query(len);
			for (int j = 0; j < F.size(); j++) {
				int pos = F[j];
				X2.update(pos, INF); L2.erase(-pos); R2.erase(pos);
				auto itr1 = L1.lower_bound(-pos);
				auto itr2 = R1.lower_bound(pos);
				if (R1.size() >= 1 && itr2 != R1.end()) {
					int V2 = *itr2;
					int S = X1.dat[V2 + X1.size_];
					X1.update(V2, INF); L1.erase(-V2); R1.erase(V2);
					if (L1.size() >= 1 && itr1 != L1.end()) {
						int V1 = *itr1; V1 *= -1;
						X1.update(V1, V2 - V1 + S);
					}
				}
			}
		}
		if (S[i] == 'm') {
			len--;
			vector<int>F = X1.query(-len);
			for (int j = 0; j < F.size(); j++) {
				int pos = F[j];
				X1.update(pos, INF); L1.erase(-pos); R1.erase(pos);
				auto itr1 = L2.lower_bound(-pos);
				auto itr2 = R2.lower_bound(pos);
				if (R2.size() >= 1 && itr2 != R2.end()) {
					int V2 = *itr2;
					int S = X2.dat[V2 + X2.size_];
					X2.update(V2, INF); L2.erase(-V2); R2.erase(V2);
					if (L2.size() >= 1 && itr1 != L2.end()) {
						int V1 = *itr1; V1 *= -1;
						X2.update(V1, V2 - V1 + S);
					}
				}
			}
		}
	}
	for (int i = 1; i <= N; i++) {
		int G = X1.dat[i + X1.size_];
		if (G < INF) {
			for (int j = i; j < i + G + len; j++) E[j] = 1;
		}
	}
	return E[sum + 1];
}

int main() {
	cin >> N;
	for (int i = 1; i <= N; i++) cin >> A[i];
	cin >> S;
	int L = 0, R = (1 << 17), M, maxn = 0;
	for (int i = 0; i < 20; i++) {
		M = (L + R) / 2;
		if (solve(M) == 1) { L = M; maxn = max(maxn, M); }
		else { R = M; }
	}
	cout << maxn << endl;
	return 0;
}

Submission Info

Submission Time
Task B - Compression
User E869120
Language C++14 (GCC 5.4.1)
Score 1400
Code Size 3171 Byte
Status AC
Exec Time 1024 ms
Memory 9156 KB

Judge Result

Set Name Sample subtask1 subtask2 All
Score / Max Score 0 / 0 400 / 400 800 / 800 200 / 200
Status
AC × 4
AC × 13
AC × 13
AC × 53
Set Name Test Cases
Sample sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt
subtask1 sample_2.txt, subtask_1.2_1.txt, subtask_1.2_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt
subtask2 sample_1.txt, subtask_1.2_1.txt, subtask_1.2_2.txt, subtask_2_1.txt, subtask_2_10.txt, subtask_2_2.txt, subtask_2_3.txt, subtask_2_4.txt, subtask_2_5.txt, subtask_2_6.txt, subtask_2_7.txt, subtask_2_8.txt, subtask_2_9.txt
All sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, 2_1.txt, 2_2.txt, sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, subtask_1.2_1.txt, subtask_1.2_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt, subtask_2_1.txt, subtask_2_10.txt, subtask_2_2.txt, subtask_2_3.txt, subtask_2_4.txt, subtask_2_5.txt, subtask_2_6.txt, subtask_2_7.txt, subtask_2_8.txt, subtask_2_9.txt, subtask_3_1.txt, subtask_3_10.txt, subtask_3_11.txt, subtask_3_12.txt, subtask_3_13.txt, subtask_3_14.txt, subtask_3_15.txt, subtask_3_16.txt, subtask_3_17.txt, subtask_3_18.txt, subtask_3_19.txt, subtask_3_2.txt, subtask_3_20.txt, subtask_3_21.txt, subtask_3_3.txt, subtask_3_4.txt, subtask_3_5.txt, subtask_3_6.txt, subtask_3_7.txt, subtask_3_8.txt, subtask_3_9.txt
Case Name Status Exec Time Memory
2_1.txt AC 1 ms 256 KB
2_2.txt AC 1 ms 256 KB
sample_1.txt AC 1 ms 256 KB
sample_2.txt AC 1 ms 256 KB
sample_3.txt AC 1 ms 256 KB
sample_4.txt AC 1 ms 256 KB
subtask_1.2_1.txt AC 1 ms 256 KB
subtask_1.2_2.txt AC 1 ms 256 KB
subtask_1_1.txt AC 109 ms 7936 KB
subtask_1_10.txt AC 109 ms 7936 KB
subtask_1_2.txt AC 110 ms 8164 KB
subtask_1_3.txt AC 111 ms 8296 KB
subtask_1_4.txt AC 112 ms 6912 KB
subtask_1_5.txt AC 36 ms 1144 KB
subtask_1_6.txt AC 110 ms 7936 KB
subtask_1_7.txt AC 1 ms 256 KB
subtask_1_8.txt AC 109 ms 7936 KB
subtask_1_9.txt AC 110 ms 7936 KB
subtask_2_1.txt AC 508 ms 7936 KB
subtask_2_10.txt AC 465 ms 7936 KB
subtask_2_2.txt AC 196 ms 7936 KB
subtask_2_3.txt AC 523 ms 7936 KB
subtask_2_4.txt AC 172 ms 7936 KB
subtask_2_5.txt AC 1 ms 256 KB
subtask_2_6.txt AC 1 ms 256 KB
subtask_2_7.txt AC 1 ms 256 KB
subtask_2_8.txt AC 588 ms 8252 KB
subtask_2_9.txt AC 37 ms 2040 KB
subtask_3_1.txt AC 1024 ms 8420 KB
subtask_3_10.txt AC 610 ms 7936 KB
subtask_3_11.txt AC 964 ms 8512 KB
subtask_3_12.txt AC 200 ms 7936 KB
subtask_3_13.txt AC 202 ms 7936 KB
subtask_3_14.txt AC 210 ms 8064 KB
subtask_3_15.txt AC 205 ms 7936 KB
subtask_3_16.txt AC 209 ms 7936 KB
subtask_3_17.txt AC 114 ms 8312 KB
subtask_3_18.txt AC 114 ms 8192 KB
subtask_3_19.txt AC 117 ms 8192 KB
subtask_3_2.txt AC 710 ms 7936 KB
subtask_3_20.txt AC 116 ms 8188 KB
subtask_3_21.txt AC 120 ms 8172 KB
subtask_3_3.txt AC 81 ms 1308 KB
subtask_3_4.txt AC 832 ms 7784 KB
subtask_3_5.txt AC 796 ms 9156 KB
subtask_3_6.txt AC 777 ms 7936 KB
subtask_3_7.txt AC 548 ms 7936 KB
subtask_3_8.txt AC 573 ms 7936 KB
subtask_3_9.txt AC 326 ms 8064 KB