感觉指针容易错,可以用数组模拟。数组开两倍(因为如果一直从前插入从0开始下标就是负数了,数组会越界),然后双指针,l记录头的位置,r记录尾的位置,因为排序不超过十次,所以sort(nlogn)不会超时的。
最开始l在2e5的位置(只要数组够大,l再往后一些也是可以的),r=l;
模拟以下操作
- a从前面插入元素(就是a[--l]=x,如果r=l+1的话,就可以用a[l--]=x);
- 从前面删除一个元素(++l就相当于删掉最前面的元素);
- a从后面插入一个元素(就是a[r++]=x);
- 从后面删除一个元素(r--就相当于删掉最后面的元素);
- 将整个容器头尾翻转 ,reverse(a+l,a+r);
- 输出个数和所有元素 (遍历数组下标l到r输出就好了);
- 对所有元素进行从小到大排序,sort(a+l,a+r);