단순한 해설
문자열의 길이가 N이고 쿼리의 개수가 Q인데, 둘 다 최대치가 백만이다. 단순 탐색으로는 제 시간에 풀 수 없다.
단순히 이분탐색을 여러번 하면 된다.
답
#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
string str;
int n,q;
cin>>n>>q>>str;
deque<int> r;
deque<int> b;
for(int i=0;i<str.size();++i){
if(str[i]=='R'){
r.push_back(i);
}
else if(str[i]=='B'){
b.push_back(i);
}
}
int L,R;
for(int i=0;i<q;++i){
cin>>L>>R;
int ansA=lower_bound(r.begin(),r.end(),L)-r.begin();
if(ansA==r.size()){
cout<<"-1\n";
continue;
}
int ansB=lower_bound(r.begin(),r.end(),r[ansA]+1)-r.begin();
if(ansB==r.size()){
cout<<"-1\n";
continue;
}
int ansC=lower_bound(b.begin(),b.end(),r[ansB]+1)-b.begin();
if(ansC==b.size()){
cout<<"-1\n";
continue;
}
int ansD=lower_bound(b.begin(),b.end(),b[ansC]+1)-b.begin();
if(ansD==b.size()||b[ansD]>R){
cout<<"-1\n";
continue;
}
cout<<r[ansA]<<" "<<r[ansB]<<" "<<b[ansC]<<" "<<b[ansD]<<"\n";
}
}
'알고리즘' 카테고리의 다른 글
백준 14445 케이크(?) 자르기 C++ (0) | 2024.08.02 |
---|---|
백준 12869 뮤탈리스크 (0) | 2024.07.29 |
페르마의 소정리 c++ (0) | 2024.04.09 |
오일러 피함수(오일러 토션트 함수) c++ (0) | 2024.04.09 |
C++ 문제 해결을 위한 STL 야매 정복 - set, map (0) | 2024.04.09 |