几个有用的STL函数和编程中的一些细节处理

1.unique函数

加入a为一个数组,n为数组长度,先将a数组sort一下,然后int k=unique(a,a+n)-a;这样就去掉了a中连续且相同的元素,k中就保存了a中去重以后的元素个数,常用于扫描线的离散化

2.lower_bound函数

这个函数以二分的形式来查找容器中相应值所在的位置,比如lower_bound(a,a+n,val),就在a数组中,a+n的长度内寻找第一个大于或等于val的元素位置,用int k=lower_bound(a,a+n,val)-a,来获得符合该条件的元素下标,学长说如果用stl容器时用这个函数就直接调用容器的.lower_bound(),这样会快得多

3.short

不要小看这个数据类型,在大规模数据要用哈希的题中,卡内存的时候就要用short来存储结果了,mark一下

4.离散化

这个技巧贯穿于扫描线,而且可以大大降低时间复杂度和空间复杂度,原理和做法可以在我之前的扫描线文章中找到,如果负责数据结构的童鞋一定要掌握吧

5.各种模板的使用

熟记各种题是几乎不可能的,这时候我们就需要总结些模板,这些最好是自己看一些博客自己总结,不要套用别人的不然可能比赛中要理解一阵子耗时间,常用的模板要在比赛前打印出来或者记在本子上,目前为止我接触到的常用的模板有:归并排序求逆序对模板,筛法素数打表模板,快速幂模板,母函数模板,扫描线模板,以及最短路一些套路算法和最小生成树的几个算法

6.二分查找

随着题目难度增加,要习惯只要数据一大就二分,二分效率很高,当然二分的前提是有序

7.DEBUG

经常在写完代码的时候测试莫名其妙出问题,这时最好的方法不是什么单步跟踪,而是在可能会出错的地方printf一些提示,这样就能发现错误了

8.数据范围炒鸡大

这个时候一般就不涉及什么算法和数据结构了,一般不是推公式就是找规律,如果数学不好就写个搜索算法找规律吧少年

9.推荐一些博客(后续更新)

想学线段树的同学,我看过一个博主的博客讲的很细也很好,mark一下:http://blog.csdn.net/zearot/article/details/48299459


你可能感兴趣的:(ACM,STL,总结向)