Submission #1007159


Source Code Expand

#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <string>
#include <vector>
#include <bitset>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cassert>
#include <queue>

#define mp make_pair
#define pb push_back


typedef long long ll;
typedef long double ld;

using namespace std;
const int MAXN = 220000;

int n;
int b[MAXN];
int a[MAXN];
char s[MAXN];
set<pair<int, int> > ss0;
set<pair<int, int> > ss1;
set<pair<int, int> > ms0;
set<pair<int, int> > ms1;

int check(int x) {
	for (int i = 0; i < n; ++i)
		a[i] = (b[i] >= x ? 1 : 0);
	int c0 = 0;
	int c1 = 0;
	ss0.clear();
	ss1.clear();
	ms0.clear();
	ms1.clear();
	int l = 0;
	for (int i = 0; i < n; ++i) {
		if (i == n - 1 || a[i] != a[i + 1]) {
			if (a[i] == 0) {
				ss0.insert(make_pair(i - l + 1, l));
				ms0.insert(make_pair(l, i - l + 1));
			}
			else {
				ss1.insert(make_pair(i - l + 1, l));
				ms1.insert(make_pair(l, i - l + 1));
			}
			l = i + 1;
		}
	}
	for (int i = 0; i < n - 1; ++i) {
		if (s[i] == 'M') {
			++c1;
			while (!ss0.empty() && ss0.begin()->first + c0 - c1 <= 0) {
				int len = ss0.begin()->first;
				int p = ss0.begin()->second;
				ss0.erase(make_pair(len, p));
				ms0.erase(make_pair(p, len));
				auto itr = ms1.lower_bound(make_pair(p, 0));
				if (itr == ms1.end() || itr == ms1.begin())
					continue;
				auto itl = itr;
				--itl;
				pair<int, int> pl = *itl;
				pair<int, int> pr = *itr;
				pair<int, int> nw = make_pair(pl.first, (pl.second - c0 + c1) + (pr.second - c0 + c1) - c1 + c0);
				ms1.erase(itl);
				ms1.erase(itr);
				ss1.erase(make_pair(pl.second, pl.first));
				ss1.erase(make_pair(pr.second, pr.first));
				ms1.insert(nw);
				ss1.insert(make_pair(nw.second, nw.first));
			}
		}
		else {
			++c0;
			while (!ss1.empty() && ss1.begin()->first + c1 - c0 <= 0) {
				int len = ss1.begin()->first;
				int p = ss1.begin()->second;
				ss1.erase(make_pair(len, p));
				ms1.erase(make_pair(p, len));
				auto itr = ms0.lower_bound(make_pair(p, 0));
				if (itr == ms0.end() || itr == ms0.begin())
					continue;
				auto itl = itr;
				--itl;
				pair<int, int> pl = *itl;
				pair<int, int> pr = *itr;
				pair<int, int> nw = make_pair(pl.first, (pl.second - c1 + c0) + (pr.second - c1 + c0) - c0 + c1);
				ms0.erase(itl);
				ms0.erase(itr);
				ss0.erase(make_pair(pl.second, pl.first));
				ss0.erase(make_pair(pr.second, pr.first));
				ms0.insert(nw);
				ss0.insert(make_pair(nw.second, nw.first));
			}
		}
	}
	for (auto it: ms1) {
		int p = it.first;
		int l = it.second;
		p -= c1;
		l += c1 - c0;
		if (p <= 0 && p + l > 0)
			return 1;
	}
	return 0;
}

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; ++i)
		scanf("%d", b + i);
	scanf(" %s", s);
	int lb = 0;
	int rb = 120000;
	while (rb - lb > 1) {
		int mid = (lb + rb) >> 1;
		if (check(mid))
			lb = mid;
		else
			rb = mid;
	}
	cout << lb << "\n";
	return 0;
}


Submission Info

Submission Time
Task B - Compression
User LHiC
Language C++14 (GCC 5.4.1)
Score 1400
Code Size 3061 Byte
Status AC
Exec Time 743 ms
Memory 5760 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:117:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
                 ^
./Main.cpp:119:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", b + i);
                     ^
./Main.cpp:120:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf(" %s", s);
                 ^

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 × 49
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, 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 3 ms 256 KB
2_2.txt AC 3 ms 256 KB
sample_1.txt AC 3 ms 256 KB
sample_2.txt AC 3 ms 256 KB
sample_3.txt AC 3 ms 256 KB
sample_4.txt AC 3 ms 256 KB
subtask_1.2_1.txt AC 3 ms 256 KB
subtask_1.2_2.txt AC 3 ms 256 KB
subtask_1_1.txt AC 82 ms 5632 KB
subtask_1_10.txt AC 82 ms 5632 KB
subtask_1_2.txt AC 82 ms 5632 KB
subtask_1_3.txt AC 81 ms 5632 KB
subtask_1_4.txt AC 86 ms 4736 KB
subtask_1_5.txt AC 21 ms 896 KB
subtask_1_6.txt AC 82 ms 5632 KB
subtask_1_7.txt AC 3 ms 256 KB
subtask_1_8.txt AC 81 ms 5632 KB
subtask_1_9.txt AC 81 ms 5632 KB
subtask_2_1.txt AC 395 ms 5632 KB
subtask_2_10.txt AC 367 ms 5632 KB
subtask_2_2.txt AC 131 ms 5632 KB
subtask_2_3.txt AC 414 ms 5632 KB
subtask_2_4.txt AC 123 ms 5632 KB
subtask_2_5.txt AC 3 ms 256 KB
subtask_2_6.txt AC 3 ms 256 KB
subtask_2_7.txt AC 3 ms 256 KB
subtask_2_8.txt AC 439 ms 5504 KB
subtask_2_9.txt AC 30 ms 1536 KB
subtask_3_1.txt AC 743 ms 5760 KB
subtask_3_10.txt AC 453 ms 5632 KB
subtask_3_11.txt AC 715 ms 5760 KB
subtask_3_12.txt AC 132 ms 5632 KB
subtask_3_13.txt AC 133 ms 5632 KB
subtask_3_14.txt AC 140 ms 5632 KB
subtask_3_15.txt AC 139 ms 5632 KB
subtask_3_16.txt AC 139 ms 5632 KB
subtask_3_17.txt AC 84 ms 5632 KB
subtask_3_18.txt AC 83 ms 5632 KB
subtask_3_19.txt AC 84 ms 5632 KB
subtask_3_2.txt AC 520 ms 5632 KB
subtask_3_20.txt AC 85 ms 5632 KB
subtask_3_21.txt AC 85 ms 5632 KB
subtask_3_3.txt AC 53 ms 896 KB
subtask_3_4.txt AC 551 ms 4736 KB
subtask_3_5.txt AC 572 ms 4608 KB
subtask_3_6.txt AC 561 ms 5632 KB
subtask_3_7.txt AC 403 ms 5632 KB
subtask_3_8.txt AC 433 ms 5632 KB
subtask_3_9.txt AC 214 ms 5632 KB