感觉指针容易错,可以用数组模拟。数组开两倍(因为如果一直从前插入从0开始下标就是负数了,数组会越界),然后双指针,l记录头的位置,r记录尾的位置,因为排序不超过十次,所以sort(nlogn)不会超时的。
最开始l在2e5的位置(只要数组够大,l再往后一些也是可以的),r=l;

模拟以下操作

  1. a从前面插入元素(就是a[--l]=x,如果r=l+1的话,就可以用a[l--]=x);
  2. 从前面删除一个元素(++l就相当于删掉最前面的元素);
  3. a从后面插入一个元素(就是a[r++]=x);
  4. 从后面删除一个元素(r--就相当于删掉最后面的元素);
  5. 将整个容器头尾翻转 ,reverse(a+l,a+r);
  6. 输出个数和所有元素 (遍历数组下标l到r输出就好了);
  7. 对所有元素进行从小到大排序,sort(a+l,a+r);

附上我丑陋的代码
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43754330&returnHomeType=1&uid=116719221