Submission #1005029
Source Code Expand
#include "bits/stdc++.h"
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define rer(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
#define reu(i,l,u) for(int (i)=(int)(l);(i)<(int)(u);++(i))
static const int INF = 0x3f3f3f3f; static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
typedef vector<int> vi; typedef pair<int, int> pii; typedef vector<pair<int, int> > vpii; typedef long long ll;
template<typename T, typename U> static void amin(T &x, U y) { if(y < x) x = y; }
template<typename T, typename U> static void amax(T &x, U y) { if(x < y) x = y; }
struct MovingRuns {
static const int NumColors = 2;
struct Run {
int color;
int basePos;
Run *linkL, *linkR;
};
vector<Run> runs;
int offsets[NumColors];
Run *head;
priority_queue<pair<int, Run*>> pqs[NumColors][NumColors];
void init(const vector<int> &A) {
runs.clear();
{
int n = (int)A.size();
int curL = 0;
for(int i = 0; i <= n; i ++) {
if(i == n || (i != 0 && A[i] != A[i - 1])) {
runs.push_back(Run{ A[i - 1], curL, nullptr, nullptr });
curL = i;
}
}
}
rep(i, runs.size()) {
if(0 < i)
runs[i].linkL = &runs[i - 1];
if(i + 1 < (int)runs.size())
runs[i].linkR = &runs[i + 1];
}
head = runs.empty() ? nullptr : &runs[0];
rep(k, NumColors) {
offsets[k] = 0;
rep(l, NumColors)
while(!pqs[k][l].empty()) pqs[k][l].pop();
}
rep(i, (int)runs.size() - 1) {
int dist = getDist(&runs[i]);
pqs[runs[i].color][runs[i + 1].color].push(make_pair(-dist, &runs[i]));
}
}
int getDist(Run *x) const {
Run *y = x->linkR;
if(!y)
return INF;
return y->basePos - x->basePos + offsets[y->color] - offsets[x->color];
}
void moveToRight(int k) {
++ offsets[k];
rep(l, NumColors) {
auto &pq = pqs[k][l];
while(!pq.empty()) {
int dist = -pq.top().first + offsets[l] - offsets[k];
Run *run = pq.top().second;
if(getDist(run) != dist) {
pq.pop();
continue;
}
if(dist > 0)
break;
assert(dist == 0);
pq.pop();
Run *l = run->linkL, *r = run->linkR;
if(l != nullptr)
l->linkR = r;
else
head = r;
if(r != nullptr)
r->linkL = l;
run->linkL = run->linkR = nullptr;
run->color = -1;
if(l != nullptr && r != nullptr) {
int dist = getDist(l);
int d = dist - offsets[r->color] + offsets[l->color];
pqs[l->color][r->color].push(make_pair(-d, l));
}
}
}
}
void getResult(int n, vector<int> &colors) const {
colors.assign(n, -1);
int curL = 0, curColor = -1;
for(const Run *x = head; ; x = x->linkR) {
int pos = x == nullptr ? n : x->basePos + offsets[x->color],
color = x == nullptr ? -1 : x->color;
for(int i = curL; i < pos && i < n; ++ i)
colors[i] = curColor;
curL = pos, curColor = color;
if(x == nullptr) break;
}
}
};
int main() {
int N;
while(~scanf("%d", &N)) {
vector<int> A(N);
for(int i = 0; i < N; ++ i)
scanf("%d", &A[i]);
char S[100000];
scanf("%s", S);
MovingRuns mr;
int lo = 1, up = N;
while(up - lo > 0) {
int mid = (lo + up + 1) / 2;
vector<int> colors(N);
rep(i, N)
colors[i] = A[i] >= mid;
mr.init(colors);
rep(i, N - 1) {
if(S[i] == 'M') {
mr.moveToRight(0);
} else {
mr.moveToRight(1);
}
}
vector<int> result;
mr.getResult(N, result);
if(result[N - 1] == 1)
lo = mid;
else
up = mid - 1;
}
printf("%d\n", lo);
}
return 0;
}
Submission Info
Submission Time |
|
Task |
B - Compression |
User |
anta |
Language |
C++14 (GCC 5.4.1) |
Score |
1400 |
Code Size |
3583 Byte |
Status |
AC |
Exec Time |
252 ms |
Memory |
4596 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:111:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &A[i]);
^
./Main.cpp:113: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 |
2 ms |
256 KB |
sample_1.txt |
AC |
3 ms |
256 KB |
sample_2.txt |
AC |
2 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 |
64 ms |
4596 KB |
subtask_1_10.txt |
AC |
60 ms |
4596 KB |
subtask_1_2.txt |
AC |
57 ms |
4596 KB |
subtask_1_3.txt |
AC |
56 ms |
4596 KB |
subtask_1_4.txt |
AC |
53 ms |
4244 KB |
subtask_1_5.txt |
AC |
12 ms |
704 KB |
subtask_1_6.txt |
AC |
62 ms |
4596 KB |
subtask_1_7.txt |
AC |
3 ms |
256 KB |
subtask_1_8.txt |
AC |
60 ms |
4596 KB |
subtask_1_9.txt |
AC |
60 ms |
4596 KB |
subtask_2_1.txt |
AC |
152 ms |
4084 KB |
subtask_2_10.txt |
AC |
142 ms |
4084 KB |
subtask_2_2.txt |
AC |
82 ms |
4084 KB |
subtask_2_3.txt |
AC |
156 ms |
4084 KB |
subtask_2_4.txt |
AC |
76 ms |
4084 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 |
156 ms |
4084 KB |
subtask_2_9.txt |
AC |
19 ms |
1148 KB |
subtask_3_1.txt |
AC |
252 ms |
4588 KB |
subtask_3_10.txt |
AC |
143 ms |
4596 KB |
subtask_3_11.txt |
AC |
249 ms |
4588 KB |
subtask_3_12.txt |
AC |
71 ms |
4340 KB |
subtask_3_13.txt |
AC |
70 ms |
4340 KB |
subtask_3_14.txt |
AC |
62 ms |
4596 KB |
subtask_3_15.txt |
AC |
59 ms |
4596 KB |
subtask_3_16.txt |
AC |
59 ms |
4596 KB |
subtask_3_17.txt |
AC |
61 ms |
4596 KB |
subtask_3_18.txt |
AC |
60 ms |
4596 KB |
subtask_3_19.txt |
AC |
63 ms |
4596 KB |
subtask_3_2.txt |
AC |
182 ms |
4468 KB |
subtask_3_20.txt |
AC |
63 ms |
4596 KB |
subtask_3_21.txt |
AC |
62 ms |
4596 KB |
subtask_3_3.txt |
AC |
25 ms |
700 KB |
subtask_3_4.txt |
AC |
212 ms |
4212 KB |
subtask_3_5.txt |
AC |
189 ms |
3640 KB |
subtask_3_6.txt |
AC |
211 ms |
4340 KB |
subtask_3_7.txt |
AC |
135 ms |
4596 KB |
subtask_3_8.txt |
AC |
149 ms |
4596 KB |
subtask_3_9.txt |
AC |
89 ms |
4596 KB |