加个小优化,把原序列中每个数的质因数大于阈值的整成一个新的序列,小于的就每次遍历算贡献。
这样连快读都不用,测评记录。
不过重点不是这个 /fad,我是来问两个玄学问题的。
我的代码 里有这两个部分。
一个是莫队的移动区间算贡献:
void Contribute()
{
int l = 1, r = 0;
for (int i = 1; i <= m; ++i)
{
while (l > Q[i].sl) Make_Cont(--l, 1);
while (r < Q[i].sr) Make_Cont(++r, 1);
while (l < Q[i].sl) Make_Cont(l++, -1);
while (r > Q[i].sr) Make_Cont(r--, -1);
/*
while (l > Q[i].sl) Make_Cont(--l, 1);
while (l < Q[i].sl) Make_Cont(l++, -1);
while (r > Q[i].sr) Make_Cont(r--, -1);
while (r < Q[i].sr) Make_Cont(++r, 1);
*/
ans[Q[i].id] = Find_Val(i);
}
}
改成注释里面的版本就会 WA。
第二个问题,主函数里面处理逆元和离散化的部分。
Find_Mes(); // 处理逆元和离散化
for (int i = 1, l, r; i <= m; ++i)
{
scanf("%d %d", &l, &r);
Q[i] = Query(l, r, lps[l], rps[r], i);
}
sort(Q + 1, Q + 1 + m);
/*Find_Mes()*/
把 Find_Mes()
函数放到注释的位置就会 TLE。
有神仙能回答一下我的问题吗?谢谢。