如果你只 AC on #1 && #17
查看原帖
如果你只 AC on #1 && #17
750173
ademik楼主2023/8/2 11:51

检查一下计算询问左端点 和 公共左端点之间的部分时, 不能用记录上一次询问的变量取极大值

这样写是错的

while(Q[i].x < ll) {
    ll --;
    if(ed2[a[ll]] == 0) ed2[a[ll]] = ll;
    mark = max(mark, max(ed[a[ll]], ed2[a[ll]]) - ll);
}
while(ll < R[now]) ed2[a[ll]] = 0, ll ++;
ans[Q[i].id] = mark;

而因这样写

int tmp = 0;
while(Q[i].x < ll) {
    ll --;
    if(ed2[a[ll]] == 0) ed2[a[ll]] = ll;
    tmp = max(tmp, max(ed[a[ll]], ed2[a[ll]]) - ll);
}
while(ll < R[now]) ed2[a[ll]] = 0, ll ++;
ans[Q[i].id] = max(tmp, mark);
2023/8/2 11:51
加载中...