!蒟蒻调不出2852,寻找台风反而被台风往代码中加入大肠导致WA90,求调
  • 板块灌水区
  • 楼主Zq_water
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/2 16:11
  • 上次更新2024/8/3 08:18:05
查看原帖
!蒟蒻调不出2852,寻找台风反而被台风往代码中加入大肠导致WA90,求调
895435
Zq_water楼主2024/8/2 16:11

rt

#include<bits/stdc++.h>
#define INF 1e16
#define endl '\n'
#define PI acos(-1)
#define pb push_back
#define int long long
#define mem(x,v) memset(x,v,sizeof x)
using namespace std;
const int N = 2e4+5;
const int V = 1e6+5;
inline int read(){
	register int x=0,f=1;register char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}

int n,k,ans;
int t[V],id[N<<1];

int last=1,tot=1;
struct SAM{
	int fa,len,siz;
	map <int,int> son;
}sam[N<<1];

void insert(int x){
	int p=last,np=last=++tot;
	sam[np].len=sam[p].len+1,sam[p].siz=1;
	for(;p&&!sam[p].son.count(x);p=sam[p].fa)sam[p].son[x]=np;
	if(!p)sam[np].fa=1;
	else{
		int q=sam[p].son[x];
		if(sam[q].len==sam[p].len+1)sam[np].fa=q;
		else{
			int nq=++tot;
			sam[nq].son=sam[q].son,sam[nq].len=sam[p].len+1;
			sam[nq].fa=sam[q].fa,sam[q].fa=sam[np].fa=nq;
			for(;sam[p].son[x]==q;p=sam[p].fa)sam[p].son[x]=nq;
		}
	}
}
void solve(){
	for(int i=1;i<=tot;i++)t[sam[i].len]++;
	for(int i=1;i<=tot;i++)t[i]+=t[i-1];
	for(int i=1;i<=tot;i++)id[t[sam[i].len]--]=i;
	for(int i=tot;i>=1;i--){
		sam[sam[id[i]].fa].siz+=sam[id[i]].siz;
		if(sam[id[i]].siz>=k)ans=max(ans,sam[id[i]].len);
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>k;
	for(int i=1,x;i<=n;i++)cin>>x,insert(x);
	solve(),cout<<ans;
	return 0;
}
2024/8/2 16:11
加载中...