ACM练级日志:HDU 4286 STL-双端队列 以及Presentaion Error

干掉了去年天津赛区的一道题,还是很爽的,去年用双向链表没有做出来,今年用双端队列做出来了。

想法非常简单,把整个序列切成三段,左边一段,L-R一段,右边一段,这样移动指针就是队列之间把队头/队尾元素互相踢来踢去的问题了。增加删除元素都很简单,至于反转,只需要用一个bool记录当前是否是反转状态,然后在增加删除移动时分类讨论即可。


双端队列在STL里有,我用了STL里的是因为感觉手写不太好写,容易出错,毕竟前插可能还是挺麻烦的。记录一下deque的几个注意点:


首先要#include<deque>,然后声明就是STL声明: deque<int> q;

这个东西有一点比较好,就是它的迭代器是可以+1,+2……的,不用非得++,完全可以说l = q.begin()-1这样的话。

而且似乎还支持q[4]这样的访问,碉堡了……


哦还有就是它的q.begin() 未必和静态数组一样,不是说你在前面插了个元素q.push_front(v),之后q.begin()就往左移一个(--)了,它指不定跑哪儿去了,所以要重新取……


列举几个常用方法:

q.begin() 开头迭代器

q.end() 队尾迭代器,依旧是左闭右开,所以这个是空的

q.push_back(v) 在队尾加入v

q.push_front(v) 在队头加入v

q.front() 查询队头元素

q.back() 查询队尾元素

q.pop_front() 删掉队头元素

q.pop_back() 删掉队尾元素


之前RE了半天后来发现是q.begin()会乱动引起的,改了以后进入无限的PE,快疯了。后来才发现是每行末尾空格的问题,OJ不会每行末尾过滤空格,这一点还是要记住的,for输到最后一定要特判一下,别输出多余的空格……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值