Submission #2195233


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

int n,a[100009],c[100009],e[300009],f[300009],len; string S;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > PQ1,PQ2;
bool record[500009];
set<int>LL,RR;

void query_1(){
	len++;
	while(!PQ1.empty()){
		pair<int,int>E=PQ1.top();
		if(f[E.second]!=E.first) {
			PQ1.pop();continue;
		}
		if(E.first>len) break;
		// 間の区間を消す
		PQ1.pop();f[E.second]=0;
		
		// 2 個の区間を消す、新たな区間を挿入
		auto itr1=RR.lower_bound(E.second);
		int GL=*itr1,GR=E.second+E.first;
		PQ2.push(make_pair(GL,GR-GL+e[GL]));
		e[GL]=(GR-GL+e[GL]);e[GR]=0;LL.erase(-GR);RR.erase(GR);
	}
}

void query_2(){
	len--;
	while(!PQ2.empty()){
		pair<int,int>E=PQ2.top();
		if(e[E.second]!=E.first){
			PQ2.pop();continue;
		}
		if(E.first>(-len)) break;
		//区間を消す
		PQ2.pop();e[E.second]=0;
		LL.erase(-E.second);RR.erase(E.second);
		
		//間の区間を結合させる
		auto itr1=RR.lower_bound(E.second);
		auto itr2=LL.lower_bound(E.second);
		int GL=*itr1,GR=*itr2;GR*=-1;
		PQ2.push(make_pair(GL,GR-GL-e[GL]));
		f[GL+e[GL]]=GR-GL-e[GL];
		f[E.second+E.first]=0;
	}
}

bool solve(int I){
	for(int i=0;i<n;i++){e[i]=0;f[i]=0;record[i]=false;}
	LL.clear();RR.clear();len=0;
	while(!PQ1.empty()) PQ1.pop();
	while(!PQ2.empty()) PQ2.pop();
	for(int i=0;i<n;i++){
		if(a[i]>=I) c[i]=1;
		else c[i]=0;
	}
	int s=0;
	for(int i=0;i<=n;i++){
		if(c[i]==1) s++;
		else{
			if(s>=1) PQ2.push(make_pair(s,i-s));
			LL.insert(-(i-s));RR.insert((i-s));e[i-s]=s;
			s=0;
		}
	}
	s=-1000000;
	for(int i=0;i<n;i++){
		if(c[i]==0) s++;
		else{
			if(s>=1) PQ1.push(make_pair(s,i-s));
			if(s>=1)f[i-s]=s;
			s=0;
		}
	}
	//cout<<endl<<I<<": ";for(int i=0;i<n;i++) cout<<c[i]<<" ";cout<<endl;
	int sum=0;
	for(int i=0;i<S.size();i++){
		//for(int j=0;j<n;j++) cout<<e[j]<<" ";cout<<endl;
		if(S[i]=='M') query_1();
		if(S[i]=='m') query_2();
		if(S[i]=='M') sum++;
	}
	while(!PQ2.empty()){
		pair<int,int>E=PQ2.top();PQ2.pop();
		if(e[E.second]!=E.first) continue;
		for(int i=0;i<E.first+len;i++) record[E.second+i]=true;
	}
	return record[sum];
}

int main(){
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	cin>>S;
	int L=0,R=(1<<17),M,maxn;
	for(int i=0;i<20;i++){
		M=(L+R)/2;
		bool p1=solve(M);
		if(p1==true){maxn=max(maxn,M);L=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 0
Code Size 2467 Byte
Status WA
Exec Time 2104 ms
Memory 11644 KB

Judge Result

Set Name Sample subtask1 subtask2 All
Score / Max Score 0 / 0 0 / 400 0 / 800 0 / 200
Status
WA × 4
WA × 9
TLE × 4
WA × 13
WA × 42
TLE × 11
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 WA 1 ms 256 KB
2_2.txt WA 1 ms 256 KB
sample_1.txt WA 1 ms 256 KB
sample_2.txt WA 1 ms 256 KB
sample_3.txt WA 1 ms 256 KB
sample_4.txt WA 1 ms 256 KB
subtask_1.2_1.txt WA 1 ms 256 KB
subtask_1.2_2.txt WA 1 ms 256 KB
subtask_1_1.txt TLE 2104 ms 9084 KB
subtask_1_10.txt WA 144 ms 9084 KB
subtask_1_2.txt WA 142 ms 9084 KB
subtask_1_3.txt WA 147 ms 9084 KB
subtask_1_4.txt WA 134 ms 8696 KB
subtask_1_5.txt TLE 2103 ms 1664 KB
subtask_1_6.txt TLE 2104 ms 9084 KB
subtask_1_7.txt WA 1 ms 256 KB
subtask_1_8.txt TLE 2104 ms 11000 KB
subtask_1_9.txt WA 143 ms 9084 KB
subtask_2_1.txt WA 544 ms 9084 KB
subtask_2_10.txt WA 824 ms 11644 KB
subtask_2_2.txt WA 915 ms 11644 KB
subtask_2_3.txt WA 686 ms 11644 KB
subtask_2_4.txt WA 509 ms 9084 KB
subtask_2_5.txt WA 1 ms 256 KB
subtask_2_6.txt WA 1 ms 256 KB
subtask_2_7.txt WA 1 ms 256 KB
subtask_2_8.txt WA 592 ms 9084 KB
subtask_2_9.txt WA 126 ms 2992 KB
subtask_3_1.txt TLE 2104 ms 8956 KB
subtask_3_10.txt WA 152 ms 8956 KB
subtask_3_11.txt WA 154 ms 9084 KB
subtask_3_12.txt TLE 2104 ms 9084 KB
subtask_3_13.txt TLE 2104 ms 9084 KB
subtask_3_14.txt TLE 2104 ms 10748 KB
subtask_3_15.txt TLE 2104 ms 8828 KB
subtask_3_16.txt TLE 2104 ms 8700 KB
subtask_3_17.txt WA 145 ms 9084 KB
subtask_3_18.txt WA 145 ms 9084 KB
subtask_3_19.txt WA 149 ms 9084 KB
subtask_3_2.txt TLE 2104 ms 8956 KB
subtask_3_20.txt WA 148 ms 9084 KB
subtask_3_21.txt WA 147 ms 9084 KB
subtask_3_3.txt WA 68 ms 1664 KB
subtask_3_4.txt WA 143 ms 8828 KB
subtask_3_5.txt WA 131 ms 8568 KB
subtask_3_6.txt WA 157 ms 9084 KB
subtask_3_7.txt WA 151 ms 9084 KB
subtask_3_8.txt WA 154 ms 9084 KB
subtask_3_9.txt WA 179 ms 8828 KB