分块卡常建议
查看原帖
分块卡常建议
476985
Accelessar楼主2023/6/18 14:37

如果你的写法 TLE on #7#8#14 或者 #15#16。

如果是前者,那你的下传大概是这样的:

for(int i=(x-1)*len+1;id[i]==x;i++)s[i]+=tag[x];
tag[x]=0;

如果是后者,那你大概是借鉴了某题解的优化方式:

for(int i=(x-1)*len+1;id[i]==x;i++)s[i]++;
tag[x]--;

既然两种都会 T,而且 T 的点不一样,那我们就将它们有机地结合起来(

具体怎么做?我的写法是这样的:

int kk=rand()%3500;
if(kk){
    for(int i=(x-1)*len+1;id[i]==x;i++)s[i]++;
    tag[x]--;
}else {
    for(int i=(x-1)*len+1;id[i]==x;i++)s[i]+=tag[x];
    tag[x]=0;
}

这个 3500 是我人肉二分出来的,大家也可以自己多试几次(

2023/6/18 14:37
加载中...