本题两个常错点:
- 如果形如
for (auto &i : vec) { /* ... */ } 的循环中对 vec(vector 类型)进行了 push_back 等操作,整个循环可能会炸(因为迭代器失效);
- 如果你写出了这样的代码:
for (int k = latest[qt]; k >= a[i]; k--) {
qs[k].push_back(qt);
}
latest[qt] = a[i]-1;
注意,这样是错的,你会 TLE on #8, #9 或者 #10。如果 latest[qt] > a[i],下面的赋值语句仍然会执行,latest[qt] 随外层循环(1∼n)单调下降的性质将无法保证,复杂度将退化。