Submission #67751603


Source Code Expand

#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#ifndef ONLINE_JUDGE
#define _GLIBCXX_DEBUG
#endif

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




#define rep(i, N) for (int i = 0; i < N; i++)
#define repn(i, n, N) for (int i = n; i < N; i++)
#define fore(i, x) for(auto i : x)
#define rep1(i, N) for(int i = 1; i <= N; i++)
#define ll long long
#define ull unsigned long long

template<class T> inline bool chmin(T& a, T b){ if(a > b){ a = b; return 1;} return 0;}
template<class T> inline bool chmax(T& a, T b){ if (a < b){a = b; return 1;} return 0;}

const long long INF_LL = 1LL << 60;
const int INF_I = 1 << 30;

int dy[4] = {0, 1, 0, -1};
int dx[4] = {1, 0, -1, 0};

int RandInt(int a, int b){
    return a + (ll)rand() % (ll)(b - a + 1);
}

double RandDouble(){
    return 1.0 * rand() / RAND_MAX;
}

void overflow(ll a) {if(a < 0) throw;}

struct S{
    int l_len, r_len;
    char l, r;
    int mx_len;
    int len;
};


S e(){
    return {0, 0, 'A', 'A', 0, 0};
};


S op(S a, S b){
    S s;
    s.len = a.len + b.len;

   

    //真ん中でつながる
    if(a.r == b.l){
        s.mx_len =max({a.mx_len, b.mx_len, a.r_len + b.l_len});
    
        if(a.r_len == a.l_len && a.r_len == a.len){
            s.l_len = a.r_len + b.l_len;
            s.l = a.l;
        }
        else{
            s.l_len = a.l_len;
            s.l = a.l;
        }

        if(b.l_len == b.r_len && b.l_len == b.len){
            s.r_len = b.r_len + a.r_len;
            s.r = b.r;
        }else{
            s.r_len = b.r_len;
            s.r = b.r;
        }
    }else{
        s.mx_len = max(a.mx_len, b.mx_len);

        s.l_len = a.l_len;
        s.l = a.l;
        s.r_len = b.r_len;
        s.r = b.r;
    }

    return s;
}


int main(){
    int N, Q; cin >> N >> Q;
    string s; cin >> s;
    vector<S> v(N);
    rep(i, N){
        S a = {1, 1, s[i], s[i], 1, 1};
        v[i] = a;
    }

    atcoder::segtree<S, op, e> seg(v);

    for(;Q--;){
        int q; cin >> q;
        if(q == 1){
            int i; char x; cin >> i >> x; i--;
        
            S a = {1, 1, x, x, 1, 1};
            seg.set(i, a);
        }
        if(q == 2){
            int l, r; cin >> l >> r;
            l--;

        
            S a = seg.prod(l, r);
            cout << a.mx_len << "\n";
        }
    }
}

Submission Info

Submission Time
Task F - Max Combo
User Saki1103
Language C++ 20 (gcc 12.2)
Score 525
Code Size 2465 Byte
Status AC
Exec Time 733 ms
Memory 34848 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 2
AC × 74
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All evil_01.txt, evil_02.txt, evil_03.txt, evil_04.txt, evil_05.txt, evil_06.txt, evil_07.txt, evil_08.txt, evil_09.txt, evil_10.txt, evil_11.txt, evil_12.txt, evil_13.txt, evil_14.txt, evil_15.txt, evil_16.txt, evil_17.txt, evil_18.txt, evil_19.txt, evil_20.txt, evil_21.txt, evil_22.txt, evil_23.txt, evil_24.txt, evil_25.txt, evil_26.txt, evil_27.txt, evil_28.txt, sample_01.txt, sample_02.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt
Case Name Status Exec Time Memory
evil_01.txt AC 544 ms 33956 KiB
evil_02.txt AC 560 ms 33936 KiB
evil_03.txt AC 540 ms 33996 KiB
evil_04.txt AC 563 ms 34104 KiB
evil_05.txt AC 582 ms 34004 KiB
evil_06.txt AC 612 ms 33872 KiB
evil_07.txt AC 547 ms 33972 KiB
evil_08.txt AC 566 ms 33972 KiB
evil_09.txt AC 577 ms 33972 KiB
evil_10.txt AC 609 ms 34044 KiB
evil_11.txt AC 584 ms 33952 KiB
evil_12.txt AC 615 ms 34012 KiB
evil_13.txt AC 577 ms 34012 KiB
evil_14.txt AC 598 ms 33960 KiB
evil_15.txt AC 540 ms 34000 KiB
evil_16.txt AC 571 ms 33868 KiB
evil_17.txt AC 576 ms 33972 KiB
evil_18.txt AC 601 ms 33832 KiB
evil_19.txt AC 574 ms 33972 KiB
evil_20.txt AC 608 ms 33952 KiB
evil_21.txt AC 576 ms 33996 KiB
evil_22.txt AC 591 ms 33948 KiB
evil_23.txt AC 580 ms 34016 KiB
evil_24.txt AC 592 ms 34008 KiB
evil_25.txt AC 553 ms 33972 KiB
evil_26.txt AC 551 ms 34044 KiB
evil_27.txt AC 501 ms 34044 KiB
evil_28.txt AC 569 ms 33968 KiB
sample_01.txt AC 1 ms 3468 KiB
sample_02.txt AC 1 ms 3460 KiB
test_01.txt AC 583 ms 33960 KiB
test_02.txt AC 577 ms 34004 KiB
test_03.txt AC 573 ms 33972 KiB
test_04.txt AC 572 ms 34016 KiB
test_05.txt AC 564 ms 34044 KiB
test_06.txt AC 583 ms 34040 KiB
test_07.txt AC 578 ms 34040 KiB
test_08.txt AC 579 ms 33968 KiB
test_09.txt AC 629 ms 33968 KiB
test_10.txt AC 628 ms 34020 KiB
test_11.txt AC 626 ms 34004 KiB
test_12.txt AC 627 ms 33872 KiB
test_13.txt AC 626 ms 33968 KiB
test_14.txt AC 629 ms 34000 KiB
test_15.txt AC 629 ms 33960 KiB
test_16.txt AC 626 ms 33972 KiB
test_17.txt AC 619 ms 34064 KiB
test_18.txt AC 625 ms 33948 KiB
test_19.txt AC 713 ms 3432 KiB
test_20.txt AC 713 ms 3512 KiB
test_21.txt AC 725 ms 3592 KiB
test_22.txt AC 729 ms 3596 KiB
test_23.txt AC 726 ms 3724 KiB
test_24.txt AC 723 ms 3636 KiB
test_25.txt AC 722 ms 3500 KiB
test_26.txt AC 727 ms 3600 KiB
test_27.txt AC 722 ms 3488 KiB
test_28.txt AC 722 ms 3604 KiB
test_29.txt AC 733 ms 34848 KiB
test_30.txt AC 731 ms 34784 KiB
test_31.txt AC 600 ms 33952 KiB
test_32.txt AC 600 ms 33964 KiB
test_33.txt AC 605 ms 34016 KiB
test_34.txt AC 602 ms 34008 KiB
test_35.txt AC 598 ms 34012 KiB
test_36.txt AC 603 ms 34008 KiB
test_37.txt AC 604 ms 33976 KiB
test_38.txt AC 602 ms 33876 KiB
test_39.txt AC 605 ms 33948 KiB
test_40.txt AC 600 ms 33988 KiB
test_41.txt AC 621 ms 33952 KiB
test_42.txt AC 600 ms 34048 KiB
test_43.txt AC 244 ms 34108 KiB
test_44.txt AC 256 ms 33972 KiB