Submission #67750972


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define R cin>>
#define ex exit(0)
#define ln cout<<'\n'
#define ll long long
#define in(a) insert(a)
#define pb(a) push_back(a)
#define pd(a) printf("%.12f\n",a)
#define mem(a) memset(a,0,sizeof(a))
#define all(c) (c).begin(),(c).end()
#define iter(c) __typeof((c).begin())
#define rrep(i,n) for(ll i=(ll)(n)-1;i>=0;i--)
#define REP(i,m,n) for(ll i=(ll)(m);i<(ll)(n);i++)
#define rep(i,n) REP(i,0,n)
#define tr(it,c) for(iter(c) it=(c).begin();it!=(c).end();it++)
ll check(ll n,ll m,ll x,ll y){return x>=0&&x<n&&y>=0&&y<m;}void pr(){ln;}
template<class A,class...B>void pr(const A &a,const B&...b){cout<<a<<(sizeof...(b)?" ":"");pr(b...);}
template<class A>void PR(A a,ll n){rep(i,n)cout<<(i?" ":"")<<a[i];ln;}
const ll MAX=1e9+7,MAXL=1LL<<61,dx[8]={-1,0,1,0,-1,-1,1,1},dy[8]={0,1,0,-1,-1,1,1,-1};
typedef pair<ll,ll> P;

class RMQ{
public:
  int n;
  P dat[2222222];
  void init(int _n){
    n=1;
    while(n<_n)n*=2;
    rep(i,2*n) dat[i]=P(-MAXL,-1);
  }
  void update(int k,P a){
    k+=n-1;dat[k]=a;
    while(k>0){
      k=(k-1)/2;
      dat[k]=max(dat[k*2+1],dat[k*2+2]);
    }
  }
  P query(int a,int b){return query(a,b,0,0,n);}
  P query(int a,int b,int k,int l,int r){
    if(r<=a||b<=l) return P(-MAXL,-1);
    if(a<=l&&r<=b) return dat[k];
    P vl=query(a,b,k*2+1,l,(l+r)/2);
    P vr=query(a,b,k*2+2,(l+r)/2,r);
    return max(vl,vr);
  }
};

RMQ t;

set<ll> se[26];
set<P> s[26];
ll m=1;
void IN(P p,ll k) {
  iter(s[k]) it=s[k].upper_bound(P(p.F,MAXL));
  if(it!=s[k].begin()) {
    it--;
    P q=*it;
    if(q.F<=p.F&&p.F<=q.S||abs(p.F-q.F)<=m||abs(p.F-q.S)<=m) {
      p.F=min(p.F,q.F);
      p.S=max(p.S,q.S);
      s[k].erase(it);
      t.update(q.F,P(-MAXL,-1));
    }
  }
  while(1) {
    it=s[k].upper_bound(P(p.F,-1));
    if(it==s[k].end()) break;
    P q=*it;
    if(abs(p.S-q.F)>m&&abs(q.S-p.F)>m) break;
    else {
      p.F=min(p.F,q.F);
      p.S=max(p.S,q.S);
      s[k].erase(it);
      t.update(q.F,P(-MAXL,-1));
    }
  }
  s[k].in(p);
  t.update(p.F,P(p.S-p.F,p.F));
}

void DEL(P p,ll k) {
  iter(s[k]) it=s[k].upper_bound(P(p.F,MAXL));
  vector<P> v;
  if(it!=s[k].begin()) {
    it--;
    P q=*it;
    if(q.F!=p.F) {
      iter(se[k]) it2=se[k].lower_bound(p.F);
      if(it2!=se[k].begin()) {
        it2--;
        v.pb(P(q.F,*it2));
      }
    }
    if(q.S!=p.F) {
      iter(se[k]) it2=se[k].lower_bound(p.F);
      if(it2!=se[k].end()) {
        v.pb(P(*it2,q.S));
      }
    }
    s[k].erase(it);
    t.update(q.F,P(-MAXL,-1));
  }
  if(v.size()==2&&abs(v[0].S-v[1].F)<=m) {
    v[0].S=v[1].S;
    v.pop_back();
  }
  rep(i,v.size()) {
    s[k].in(v[i]);
    t.update(v[i].F,P(v[i].S-v[i].F,v[i].F));
  }
}


void Init() {}
void Main() {
  ll n,T;
  string e;
  cin >> n >> T >> e;
  t.init(n);
  rep(i,n) {
    ll k=e[i]-'a';
    se[k].in(i);
    IN(P(i,i),k);
  }
  while(T--) {
    ll z;
    R z;
    if(z==1) {
      ll x;
      char c;
      cin >> x >> c;
      x--;
      ll k=e[x]-'a';
      se[k].erase(x);
      DEL(P(x,x),k);
      e[x]=c;
      k=e[x]-'a';
      se[k].in(x);
      IN(P(x,x),k);
    } else {
      ll l,r;
      cin >> l >> r;
      l--,r--;
      P p=t.query(l,r+1);
      ll x=p.S,y=x+p.F;
      ll ans=min(y,r)-x+1;
      if(r<y) {
        t.update(p.S,P(-MAXL,-1));
        P q=t.query(l,r+1);
        ll x2=q.S,y2=x2+q.F;
        ans=max(ans,min(y2,r)-x2+1);
        t.update(p.S,p);
      }
      rep(i,26) {
        iter(s[i]) it=s[i].lower_bound(P(l,-1));
        if(it!=s[i].begin()) {
          it--;
          P q=*it;
          if(l<=q.S) ans=max(ans,min(r,q.S)-l+1);
        }
      }
      pr(ans);
    }
  }


}

int main(){ios::sync_with_stdio(0);cin.tie(0);Init();ll T=1;if(0)R T;while(T--)Main();return 0;}

Submission Info

Submission Time
Task F - Max Combo
User kzyKT
Language C++ 20 (gcc 12.2)
Score 525
Code Size 3953 Byte
Status AC
Exec Time 3834 ms
Memory 92992 KiB

Compile Error

Main.cpp: In function ‘void IN(P, long long int)’:
Main.cpp:61:16: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
   61 |     if(q.F<=p.F&&p.F<=q.S||abs(p.F-q.F)<=m||abs(p.F-q.S)<=m) {
      |                ^

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 3412 ms 92992 KiB
evil_02.txt AC 3178 ms 92924 KiB
evil_03.txt AC 3229 ms 77440 KiB
evil_04.txt AC 2915 ms 77376 KiB
evil_05.txt AC 3030 ms 72096 KiB
evil_06.txt AC 2851 ms 71996 KiB
evil_07.txt AC 2948 ms 69528 KiB
evil_08.txt AC 2782 ms 69532 KiB
evil_09.txt AC 2688 ms 67804 KiB
evil_10.txt AC 2535 ms 67944 KiB
evil_11.txt AC 2635 ms 67136 KiB
evil_12.txt AC 2585 ms 67040 KiB
evil_13.txt AC 2586 ms 66332 KiB
evil_14.txt AC 2417 ms 66236 KiB
evil_15.txt AC 2413 ms 65708 KiB
evil_16.txt AC 2253 ms 65764 KiB
evil_17.txt AC 2413 ms 65204 KiB
evil_18.txt AC 2312 ms 65304 KiB
evil_19.txt AC 2368 ms 65024 KiB
evil_20.txt AC 2332 ms 65024 KiB
evil_21.txt AC 1041 ms 61772 KiB
evil_22.txt AC 985 ms 61816 KiB
evil_23.txt AC 1035 ms 61868 KiB
evil_24.txt AC 981 ms 61788 KiB
evil_25.txt AC 636 ms 61872 KiB
evil_26.txt AC 635 ms 61700 KiB
evil_27.txt AC 611 ms 61844 KiB
evil_28.txt AC 702 ms 61900 KiB
sample_01.txt AC 14 ms 38096 KiB
sample_02.txt AC 15 ms 38224 KiB
test_01.txt AC 3797 ms 91952 KiB
test_02.txt AC 3606 ms 91996 KiB
test_03.txt AC 3834 ms 91964 KiB
test_04.txt AC 3526 ms 91976 KiB
test_05.txt AC 3710 ms 92028 KiB
test_06.txt AC 3541 ms 91892 KiB
test_07.txt AC 3736 ms 91876 KiB
test_08.txt AC 3541 ms 92000 KiB
test_09.txt AC 3190 ms 81116 KiB
test_10.txt AC 3111 ms 81264 KiB
test_11.txt AC 3024 ms 80904 KiB
test_12.txt AC 2919 ms 80996 KiB
test_13.txt AC 2983 ms 80864 KiB
test_14.txt AC 3040 ms 80824 KiB
test_15.txt AC 2981 ms 80868 KiB
test_16.txt AC 2863 ms 80876 KiB
test_17.txt AC 2959 ms 80868 KiB
test_18.txt AC 2858 ms 80848 KiB
test_19.txt AC 463 ms 38260 KiB
test_20.txt AC 461 ms 38264 KiB
test_21.txt AC 279 ms 38300 KiB
test_22.txt AC 281 ms 38288 KiB
test_23.txt AC 230 ms 38232 KiB
test_24.txt AC 220 ms 38220 KiB
test_25.txt AC 184 ms 38216 KiB
test_26.txt AC 194 ms 38240 KiB
test_27.txt AC 174 ms 38212 KiB
test_28.txt AC 168 ms 38180 KiB
test_29.txt AC 298 ms 62640 KiB
test_30.txt AC 302 ms 62684 KiB
test_31.txt AC 933 ms 61840 KiB
test_32.txt AC 879 ms 61932 KiB
test_33.txt AC 912 ms 61848 KiB
test_34.txt AC 930 ms 61868 KiB
test_35.txt AC 940 ms 61932 KiB
test_36.txt AC 882 ms 61776 KiB
test_37.txt AC 956 ms 61748 KiB
test_38.txt AC 980 ms 61832 KiB
test_39.txt AC 1528 ms 62672 KiB
test_40.txt AC 1171 ms 62096 KiB
test_41.txt AC 2405 ms 68736 KiB
test_42.txt AC 2069 ms 65844 KiB
test_43.txt AC 1717 ms 92044 KiB
test_44.txt AC 1717 ms 91912 KiB