如果你的写法 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 是我人肉二分出来的,大家也可以自己多试几次(