这题的难度不止黄吧,题解给出的难度都是蓝了。
还有,蒟蒻调不出来QAQ
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+10;
int si[maxn],ctt[maxn],cal[maxn],ans,front=1,rear,tem;
int n,k;
int read(){
int x=0;char ch=getchar();
while(isdigit(ch)){
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
multiset<int> mul;//维护区间的极致差
void solve(int num,int f){//修改质因数的个数
for(int i=2;i<=num;++i){
if(num%i!=0) continue;
int temp=ctt[i];
while(num%i==0){
ctt[i]+=f;
num/=i;
}
int tt=cal[temp];
int ta=cal[ctt[i]];
tem=tem+(ta-tt);
}
}
signed main(){
n=read();k=read();
for(int i=1;i<=n;++i) si[i]=read();
for(int i=1,j=1;i<maxn;i+=j){//预处理分解的方法数
cal[i]=cal[i-j]+j+1;
for(int k=1;k<=j&&k+i<maxn;++k) cal[k+i]=cal[i]+k;
j++;
}
for(int i=1;i<=n;++i){
rear++;
mul.insert(si[i]);
solve(si[i],1);
while(*(--mul.end())-(*mul.begin())>k){
mul.erase(mul.find(si[front]));
solve(si[front++],-1);
}
ans=max(ans,tem);
}
cout<<ans;
return 0;
}