Submission #1004512
Source Code Expand
#include <bits/stdc++.h>
#define FOR(i,a,b) for( ll i = (a); i < (ll)(b); i++ )
#define REP(i,n) FOR(i,0,n)
#define YYS(x,arr) for(auto& x:arr)
#define ALL(x) (x).begin(),(x).end()
#define SORT(x) sort( (x).begin(),(x).end() )
#define REVERSE(x) reverse( (x).begin(),(x).end() )
#define UNIQUE(x) (x).erase( unique( ALL( (x) ) ) , (x).end() )
#define PW(x) (1LL<<(x))
#define SZ(x) ((ll)(x).size())
#define SHOW(x) cout << #x << " = " << x << endl
#define pb emplace_back
#define fi first
#define se second
using namespace std;
typedef long double ld;
typedef long long int ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<bool> vb;
typedef vector<ld> vd;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<vpl> gr;
typedef vector<vl> ml;
typedef vector<vd> md;
typedef vector<vi> mi;
const ll INF = (ll)1e9 + 10;
const ll INFLL = (ll)1e18 + 10;
const ld EPS = 1e-12;
const ll MOD = 1e9+7;
template<class T> T &chmin( T &a , const T &b ){ return a = min(a,b); }
template<class T> T &chmax( T &a , const T &b ){ return a = max(a,b); }
template<class T> inline T sq( T a ){ return a * a; }
ll in(){ ll x; scanf( "%lld" , &x ); return x; }
char yuyushiki[1000010]; string stin(){ scanf( "%s" , yuyushiki ); return yuyushiki; }
// head
int n;
int a[100010];
string s;
int lens[100010];
set<int> so, sz;
priority_queue<pi,vpi,greater<pi> > qo, qz;
void add( int p , int l , bool f ){
lens[p] = l;
if( f ){
so.insert( p );
qo.emplace( l , p );
} else {
sz.insert( p );
qz.emplace( l , p );
}
}
bool check( int x ){
while( !qo.empty() ){
qo.pop();
}
while( !qo.empty() ){
qz.pop();
}
so.clear();
sz.clear();
REP( i , n ){
lens[i] = -1;
}
bool cur = a[0] >= x;
int prv = 0;
FOR( i , 1 , n ){
if( cur != ( a[i] >= x ) ){
add( prv , i-prv , cur );
prv = i;
cur = a[i] >= x;
}
}
add( prv , n-prv , cur );
int one = 0;
int zero = 0;
YYS( w , s ){
if( w == 'M' ){
one++;
} else if( 'm' ){
zero++;
} else {
assert( false );
}
// cout << w << endl;
while( !qz.empty() and qz.top().fi + zero - one <= 0 ){
assert( qz.top().fi + zero - one == 0 );
int len = qz.top().fi;
int p = qz.top().se;
qz.pop();
if( lens[p] != len ){
continue;
}
// cout << "Z " << len << " " << p << endl;
sz.erase( sz.find( p ) );
auto r = so.upper_bound( p );
if( r == so.begin() or r == so.end() ){
continue;
}
auto l = r;
l--;
lens[*l] = lens[*r] + lens[*l] + one - zero;
lens[*r] = -1;
so.erase( r );
qo.emplace( lens[*l] , *l );
}
while( !qo.empty() and qo.top().fi + one - zero <= 0 ){
assert( qo.top().fi + one - zero == 0 );
int len = qo.top().fi;
int p = qo.top().se;
qo.pop();
if( lens[p] != len ){
continue;
}
// cout << "O " << len << " " << p << endl;
so.erase( so.find( p ) );
auto r = sz.upper_bound( p );
if( r == sz.begin() or r == sz.end() ){
continue;
}
auto l = r;
l--;
lens[*l] = lens[*r] + lens[*l] + zero - one;
lens[*r] = -1;
sz.erase( r );
qz.emplace( lens[*l] , *l );
}
}
int ans = 0;
YYS( w , sz ){
int l = w - zero;
int r = w + lens[w] - one;
if( l <= 0 and 0 < r ){
assert( ans == 0 );
// cout << l << " " << r << endl;
ans = 1;
}
}
YYS( w , so ){
int l = w - one;
int r = w + lens[w] - zero;
if( l <= 0 and 0 < r ){
// cout << l << " " << r << endl;
assert( ans == 0 );
ans = 2;
}
}
assert( ans != 0 );
if( ans == 1 ){
return false;
} else {
return true;
}
}
int main(){
n = in();
REP( i , n ){
a[i] = in();
}
s = stin();
// check( 12 );
/*
REP( j , n ){
cout << ( a[j] >= 12 ) << " ";
}
cout << endl;
int b[20];
REP( i , n-1 ){
if( s[i] == 'm' ){
REP( j , n-i-1 ){
b[j] = min( a[j] , a[j+1] );
}
} else {
REP( j , n-i-1 ){
b[j] = max( a[j] , a[j+1] );
}
}
REP( j , n-i-1 ){
a[j] = b[j];
cout << ( a[j] >= 12 ) << " ";
}
cout << endl;
}
*/
int lb = 0, ub = n + 1;
while( ub - lb > 1 ){
int md = ( lb + ub ) / 2;
if( check( md ) ){
lb = md;
} else {
ub = md;
}
}
cout << lb << endl;
return 0;
}
Submission Info
Submission Time |
|
Task |
B - Compression |
User |
joisino |
Language |
C++14 (GCC 5.4.1) |
Score |
1400 |
Code Size |
4724 Byte |
Status |
AC |
Exec Time |
361 ms |
Memory |
5872 KB |
Compile Error
./Main.cpp: In function ‘ll in()’:
./Main.cpp:44:36: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
ll in(){ ll x; scanf( "%lld" , &x ); return x; }
^
./Main.cpp: In function ‘std::string stin()’:
./Main.cpp:45:66: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
char yuyushiki[1000010]; string stin(){ scanf( "%s" , yuyushiki ); return yuyushiki; }
^
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 |
75 ms |
4216 KB |
subtask_1_10.txt |
AC |
74 ms |
4216 KB |
subtask_1_2.txt |
AC |
74 ms |
4216 KB |
subtask_1_3.txt |
AC |
74 ms |
4216 KB |
subtask_1_4.txt |
AC |
66 ms |
3960 KB |
subtask_1_5.txt |
AC |
15 ms |
768 KB |
subtask_1_6.txt |
AC |
74 ms |
4216 KB |
subtask_1_7.txt |
AC |
3 ms |
256 KB |
subtask_1_8.txt |
AC |
73 ms |
4216 KB |
subtask_1_9.txt |
AC |
74 ms |
4216 KB |
subtask_2_1.txt |
AC |
233 ms |
5868 KB |
subtask_2_10.txt |
AC |
215 ms |
5868 KB |
subtask_2_2.txt |
AC |
99 ms |
5868 KB |
subtask_2_3.txt |
AC |
241 ms |
5868 KB |
subtask_2_4.txt |
AC |
91 ms |
4848 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 |
243 ms |
5868 KB |
subtask_2_9.txt |
AC |
22 ms |
1536 KB |
subtask_3_1.txt |
AC |
361 ms |
4216 KB |
subtask_3_10.txt |
AC |
233 ms |
4344 KB |
subtask_3_11.txt |
AC |
359 ms |
4468 KB |
subtask_3_12.txt |
AC |
75 ms |
4340 KB |
subtask_3_13.txt |
AC |
76 ms |
4344 KB |
subtask_3_14.txt |
AC |
70 ms |
5744 KB |
subtask_3_15.txt |
AC |
69 ms |
5872 KB |
subtask_3_16.txt |
AC |
68 ms |
5744 KB |
subtask_3_17.txt |
AC |
77 ms |
4216 KB |
subtask_3_18.txt |
AC |
76 ms |
4216 KB |
subtask_3_19.txt |
AC |
78 ms |
4216 KB |
subtask_3_2.txt |
AC |
255 ms |
4216 KB |
subtask_3_20.txt |
AC |
78 ms |
4344 KB |
subtask_3_21.txt |
AC |
78 ms |
4216 KB |
subtask_3_3.txt |
AC |
30 ms |
768 KB |
subtask_3_4.txt |
AC |
307 ms |
3960 KB |
subtask_3_5.txt |
AC |
275 ms |
3576 KB |
subtask_3_6.txt |
AC |
302 ms |
4216 KB |
subtask_3_7.txt |
AC |
203 ms |
4216 KB |
subtask_3_8.txt |
AC |
223 ms |
4216 KB |
subtask_3_9.txt |
AC |
118 ms |
4216 KB |