题意 给定一个1到\(n\)的全排列,两种操作,将\(a_{pos}\)修改为\(a_{pos}+1000000\),询问第一个大于等于\(k\)的且不在\(a_1...a_r\)的数. 分析 由于\(k<=n\),因此操作二询问的答案最大是\(n+1\),因此操作一就相当于删去一个数. 考虑用权值线段树维护下标(权值区间下标最大值),操作一就将下标置为\(n+1\),而操作二就是在值域\([k,n]\)之间查询下标大于\(r\)的最小数. 代码 #include <bits/stdc++.h…