我柜子动了TM不玩了(神秘CE)
  • 板块灌水区
  • 楼主D_FANG
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/8/11 12:06
  • 上次更新2024/8/11 13:54:28
查看原帖
我柜子动了TM不玩了(神秘CE)
635829
D_FANG楼主2024/8/11 12:06
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+114; 
struct rec{
	int l,r,mid;
}z[maxn];
bool cmp(rec a,rec b){
	return a.l<b.l;
}
struct trees{
	struct tr{
		int l,r,m;
	}tree[maxn];
	void push_up(int i){
		tree[i].m=max(tree[i*2].m,tree[i*2+1].m);
	}
	void build(int i,int l,int r){
		tree[i].l=l;tree[i].r=r;
		if (l==r){
			tree[i].m=z[l].mid;
			return ;
		}
		int mid=(l+r)/2;
		build(i*2,l,mid);
		build(i*2+1,mid+1,r);
		push_up(i);
	}
	int q_maxn(int i,int l,int r){
		if (tree[i].l>=l&&tree[i].r<=r){
			return tree[i].m;
		}
		if (tree[i].l>r||tree[i].r<l){
			return -114514;
		}
		int s=-114514;
		if (tree[i*2].r>=l) s=max(s,q_maxn(i*2,l,r));
		if (tree[i*2+1].l<=r) s=max(s,q_maxn(i*2+1,l,r));
		return s; 
	}
}t;
int q_q(int l,int r){
	return 0;
}
string c;
int a[maxn],p[maxn],r,m,n,mid,ans;
int main(){
	cin>>c;
	n=c.size();
	for (int i=0;i<n;i++){
		a[++m]=114514;
		a[++m]=a[i];
	}
	a[++m]=114514;
	a[m+1]=1919810;
	n=m;
	for (int i=1;i<=n;i++){
		if (i<r) p[i]=min(p[2*mid-i],p[mid]+mid-i);
		while (a[i+p[i]]==a[i-p[i]]) p[i]++;
		if (i+p[i]>r){
			r=i+p[i];
			mid=i;
		} 
	}
	for (int i=1;i<=n;i++){
		z[i].mid=i;
		z[i].r=i+p[i]-1;
		z[i].l=i-p[i]+1;
	}
	sort(z+1,z+1+n,cmp);
	t.build(1,1,n);
	for (int i=1;i<=n;i++){
		int xxx=q_q(i,n);
		if (xxx==i) continue;
		ans=max(ans,i,t.q_maxn(1,i,xxx));
	}
	if (ans==0) ans=2;
	printf("%d",ans);
	return 0;
}

为什会CE啊???????

2024/8/11 12:06
加载中...