检查一下计算询问左端点 和 公共左端点之间的部分时, 不能用记录上一次询问的变量取极大值
这样写是错的
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);