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 |
|
|
|
|
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 |