比赛 20161115 评测结果 TTTTTTTTTT
题目名称 军队 最终得分 0
用户昵称 jmisnal 运行时间 10.041 s
代码语言 C++ 内存使用 32.04 MiB
提交时间 2016-11-15 11:45:30
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#define maxn 1000005
#define ll long long
using namespace std;
int read()
{
	int x=0;char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
	return x;
}
bool not_prime[1000005];
int prime[1000005];
void Get_prime()
{
	for(int i=2;i<maxn;i++)
	{
		if(not_prime[i]==0)prime[++prime[0]]=i;
		for(int j=1;j<=prime[0]&&i*prime[j]<maxn;j++)
		{
			not_prime[prime[j]*i]=1;
			if( i%prime[j]==0 )break;
		}
	}
}
/*int gcd(int a,int b)
{
	if(b==0)return a;
	return gcd(b,a%b);
}*/
int n,k;
int a[maxn];
int syg[maxn],next[maxn];
void change(int zs,int now)
{
	for(int i=now+1;i<next[now];i++)
	{		
		if(a[i]%zs==0)
		{
			next[now]=i-1;syg[i]=now+1;
		}
	}
}
vector<int>vc[maxn];
void fj(int cx)
{
	int now=a[cx];
	for(int i=1;i<=prime[0];i++)
	{
		if(now%prime[i]==0)
		{
			vc[     i     ].push_back( cx );
			if(vc[i].size()>=2)
			{
				int s=vc[i][vc[i].size()-2] +1;
				if( syg[ cx ] <  s )syg[cx]=s;
				if( next[ s-1 ] > cx-1  )next[s-1]=cx-1;				
			}
		//	cout<<cx<<' '<<now<<' '<<prime[i]<<endl;
			now/=prime[i];
		}
		while(now%prime[i]==0)now/=prime[i];
		if(now==1)return;
	}
}
ll S[maxn];
int main()
{
	freopen("abcd.in","r",stdin);
	Get_prime();
	
	n=read();k=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
		S[i]=S[i-1]+a[i];
		syg[i]=0;next[i]=n+1;
	}
	for(int i=1;i<=n;i++)
		fj(i);
//	for(int i=1;i<=n;i++)
//		cout<<i<<' '<<syg[i]<<' '<<next[i]<<endl;
	int ans=0;
//	cout<<"========="<<endl;
	for(int i=1;i<=n;i++)
	{
		int zj=next[i],j;
		for(j=i+1;j<=zj;j++)
		{
			if(next[j]<zj)zj=next[j];	
		}
	//	cout<<i<<' '<<j<<' '<<zj<<' '<<S[zj]-S[i-1]<<' '<<ans<<endl;
		if( S[zj]-S[i-1] >= k)
			ans=max(ans, j-i );
	}	
	cout<<ans;
	return 0;
}