Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
39870 LYLAKIOIAKIOI 【BJ】T3 C++ 运行超时 90 3000 MS 364136 KB 3085 2026-02-02 20:42:26

Tests(100/101):


#include<bits/stdc++.h> using namespace std; const int N=1.5e6+10,M=1e5+10; int nxt[N][27],prv[N][27]; vector<int> vec[28]; struct info{ int x,y; info operator+(const info &rh) const{ return (info){x+((x&1)?(rh.y):(rh.x)),y+((y&1)?(rh.x):(rh.y))}; } }; int a[N],b[N],to[N],pl[M][27],pr[M][27];int n,m,L[M],R[M],ans[M]; string ts[M]; string str; info sum[N]; int cost=0; void solve(int x,int y){ int tot=0; vector<int> ve(vec[x].size()+vec[y].size()); merge(vec[x].begin(),vec[x].end(),vec[y].begin(),vec[y].end(),ve.begin()); tot=ve.size(); for(int i=0;i<ve.size();i++) to[ve[i]]=i+1,a[i+1]=(str[ve[i]]==(char)('a'+x)),b[i+1]=(str[ve[i]]==(char)('a'+y)); if(!tot) return ; char chx=(char)('a'+x),chy=(char)('a'+y); string stx="",sty=""; stx+=chx;stx+=chy;sty+=chy;sty+=chx; //cout<<stx<<' '<<sty<<endl; sum[0]=(info){0,0}; for(int i=1;i<=tot;i++) sum[i]=sum[i-1]+(info){a[i],b[i]}; for(int i=1;i<=m;i++){ int l=min(pl[i][x],pl[i][y]); int r=max(pr[i][x],pr[i][y]); if(l<=r){ l=to[l],r=to[r]; info PL=sum[l-1],PR=sum[r]; int sx=0,sy=0; if(PL.x&1){ sy=max(sy,PR.x-PL.x); int dt=(nxt[L[i]][x]<nxt[L[i]][y])?1:(-1); sx=max(sx,PR.x-PL.x+dt); }else{ sx=max(sx,PR.x-PL.x); int dt=(nxt[L[i]][x]>nxt[L[i]][y])?1:(-1); sy=max(sy,PR.x-PL.x+dt); } if(!(PL.y&1)){ sy=max(sy,PR.y-PL.y); int dt=(nxt[L[i]][x]<nxt[L[i]][y])?1:(-1); sx=max(sx,PR.y-PL.y+dt); }else{ sx=max(sx,PR.y-PL.y); int dt=(nxt[L[i]][x]>nxt[L[i]][y])?1:(-1); sy=max(sy,PR.y-PL.y+dt); } info res=(info){sx,sy}; if(res.x>ans[i]||(res.x==ans[i]&&stx<ts[i])){ ans[i]=res.x;ts[i]=stx; } if(res.y>ans[i]||(res.y==ans[i]&&sty<ts[i])){ ans[i]=res.y;ts[i]=sty; } } } } int main(){ //freopen("seq.in","r",stdin); //freopen("seq.out","w",stdout); ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>str;n=str.length();str=' '+str+' '; for(int i=0;i<26;i++) prv[0][i]=0,nxt[n+1][i]=n+1; for(int i=1;i<=n;i++){ memcpy(prv[i],prv[i-1],sizeof(prv[i])); prv[i][str[i]-'a']=i; } for(int i=n;i>=1;i--){ memcpy(nxt[i],nxt[i+1],sizeof(nxt[i])); nxt[i][str[i]-'a']=i; } for(int i=1;i<=n;i++){ vec[str[i]-'a'].push_back(i); } cin>>m; for(int i=1;i<=m;i++){ cin>>L[i]>>R[i]; for(int j=0;j<26;j++){ pl[i][j]=nxt[L[i]][j]; pr[i][j]=prv[R[i]][j]; } } for(int i=0;i<26;i++)for(int j=i+1;j<26;j++) solve(i,j); for(int i=1;i<=m;i++) cout<<ans[i]<<' '<<ts[i]<<'\n'; cerr<<cost<<endl; return 0; }


测评信息: