警示后人TLE90(一种新的卡常)
查看原帖
警示后人TLE90(一种新的卡常)
185223
huangziqinFJ人炖蒟蒻楼主2024/4/11 20:45

与块长无关,根号分治的上界不要直接取n\sqrt n 而可以取更小一点

TLE 90

sqn=sqrt(n);
for(register int j=1,xx,yy;j<=sqn;++j)
{
	if(!pre[j][j]) continue;
	xx=(x-1)/j+1; yy=(y-1)/j+1;
	if(xx==yy){ans=pl(ans,pl(pre[j][(y-1)%j+1]-pre[j][(x-1)%j],mod)); continue;}		ans=pl(ans,1ll*(yy-xx-1)*pre[j][j]%mod);
	ans=pl(ans,suf[j][(x-1)%j+1]);
	ans=pl(ans,pre[j][(y-1)%j+1]);
}

AC

sqn=98;
for(register int j=1,xx,yy;j<=sqn;++j)
{
	if(!pre[j][j]) continue;
	xx=(x-1)/j+1; yy=(y-1)/j+1;
	if(xx==yy){ans=pl(ans,pl(pre[j][(y-1)%j+1]-pre[j][(x-1)%j],mod)); continue;}		ans=pl(ans,1ll*(yy-xx-1)*pre[j][j]%mod);
	ans=pl(ans,suf[j][(x-1)%j+1]);
	ans=pl(ans,pre[j][(y-1)%j+1]);
}

2024/4/11 20:45
加载中...