제출 #1369855

#제출 시각아이디문제언어결과실행 시간메모리
1369855AliMark71Tornjevi (COCI25_tornjevi)C++20
110 / 110
95 ms20356 KiB
//
//  main.cpp
//  IntensiveCamp 1 2026
//
//  Created by Ali AlSalman on 27/04/2026.
//
 
#include <bits/stdc++.h>


//#define INTERACTIVE
//#define TESTCASES
//#define FUNCTIONAL
//#define SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__
 
#ifndef INTERACTIVE
#define endl '\n'
#endif
 
template<typename T>
using vec = std::vector<T>;
using namespace std;

#define all(x) x.begin(), x.end()

struct mst {
    int offset;
    vec<vec<int>> data;
    mst(vec<int> &arr) : offset(1<<(32 - __builtin_clz((int) arr.size() - 1))), data(2 * offset) {
        for (int i = 0; i < arr.size(); i++)
            data[i + offset] = {arr[i]};
        for (int i = offset - 1; i; i--)
            merge(all(data[2 * i]), all(data[2 * i + 1]), back_inserter(data[i]));
    }
    
    int _q(int v, int l, int r, int ql, int qr, int x) {
        if (ql <= l && r <= qr) return (int) distance(data[v].begin(), lower_bound(all(data[v]), x));
        else if (r <= ql || qr <= l) return 0;
        else {
            int m = (l + r) / 2;
            return _q(2 * v, l, m, ql, qr, x) + _q(2 * v + 1, m, r, ql, qr, x);
        }
    }
    int q(int l, int r, int x) {
        return _q(1, offset, 2 * offset, l + offset, r + offset + 1, x);
    }
};

void solve() {
    int n, q;
    string s;
    cin>>n>>q>>s;
    vec<int> c[2];
    vec<int> opt(n, -1);
    
    for (int i = 0; i < n; i++) {
        bool color = s[i] == 'P';
        if (!c[!color].empty()) {
            opt[i] = c[!color].back();
            c[!color].pop_back();
        }
        c[color].push_back(i);
    }
    
    mst tree(opt);
    
    while (q--) {
        int l, r;
        cin>>l>>r; l--; r--;
        cout<<tree.q(l, r, l)<<endl;
    }
    
}
 
#ifndef FUNCTIONAL
int main() {
#ifndef INTERACTIVE
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#endif
    
    int t = 1;
#ifdef TESTCASES
    cin>>t;
#endif
    
    for (int i = t; i--;) {
#if defined(TESTCASES) && defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
        cout<<"Case "<<t-i<<":\n";
#elif defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
#warning SPOJ_BULLSCHEIßE__KIJETESANPAKALU__ without TESTCASES doesn't ducking make sense!
#endif
        solve();
    }
    return 0;
}
#endif

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp:90:69: warning: missing terminating ' character
   90 | #warning SPOJ_BULLSCHEIßE__KIJETESANPAKALU__ without TESTCASES doesn't ducking make sense!
      |                                                                     ^
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…