这题真的是黄???(不明原因的错误)
查看原帖
这题真的是黄???(不明原因的错误)
292029
幽理家的男人楼主2020/12/7 21:20

这题的难度不止黄吧,题解给出的难度都是蓝了。

还有,蒟蒻调不出来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;
}

2020/12/7 21:20
加载中...