제출 #1369866

#제출 시각아이디문제언어결과실행 시간메모리
1369866FaresSTHTornjevi (COCI25_tornjevi)C++20
110 / 110
67 ms23748 KiB
#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
const int N=1<<20;
struct node{int a,b,s,mn,mx;}tn[N*2];
node mrg(node l,node r){
    return node{
        max(l.a,-r.mn)+r.s,
        max(l.b,r.mx)-r.s,
        l.s+r.s,
        min(l.mn,l.s+r.mn),
        max(l.mx,l.s+r.mx)
    };
}
node qry(int i,int l,int r,int ql,int qr){
    if(l>qr||r<ql)return node{0,0,0,0};
    if(ql<=l&&r<=qr)return tn[i];
    int m=(l+r)/2;
    return mrg(qry(i*2,l,m,ql,qr),qry(i*2+1,m+1,r,ql,qr));
}
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n,q;
    string s;
    cin>>n>>q>>s;
    for(int i=0;i<n;i++){
        if(s[i]=='P')tn[i+N]=node{1,0,1,1,1};
        else tn[i+N]=node{0,1,-1,-1,-1};
    }
    for(int i=N-1;i>0;i--)tn[i]=mrg(tn[i*2],tn[i*2+1]);
    while(q--){
        int l,r;
        cin>>l>>r;
        auto res=qry(1,0,N-1,l-1,r-1);
        cout<<res.a+res.b<<'\n';
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…