NOIP复赛复习7STL算法与结构模板.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NOIP复赛复习7STL算法与结构模板

NOIP 复赛复习7STL 算法与树结构模板 STL 算法 STL 算法是一些模板函数,提供了相当多的有用算法和操作,从简单如for_each (遍历)到 复杂如stable_sort (稳定排序),头文件是:#includealgorithm。常用STL 算法库包括: sort 快速排序算法、二分查找算法、枚举排列算法等。 1、sort 排序系列 sort:对给定区间所有元素进行排序 (全排) stable_sort:对给定区间所有元素进行稳定排序,就是相等的元素位置不变,原来在前面的 还在前面。 partial_sort:对给定区间所有元素部分排序,就是找出你指定的数目最小或最大的值放在 最前面或最后面,比如说我只要找到1000000个数中最大的五个数,那你用这个函数是最好 的,排序后最大的五个数就在最前面的五个位置,其他的元素位置分布不确定。 partial_sort_copy:对给定区间复制并排序,和上面的一样,只是这是指定区间进行复制然 后排序的。 nth_element:找出给定区间的某个位置对应的元素,根据比较函数找到第n 个最大 (小) 元素,适用于寻找“第n 个元素”。 is_sorted:判断一个区间是否已经排好序 (返回bool值判断是否已排序) partition:使得符合某个条件的元素放在前面,划分区间函数,将[first,last]中所有满足的 元素置于不满足的元素前面,这个函数会返回迭代器,设返回的迭代器为i,则对[first,i] 中的任意迭代器j,*j 满足给定的判断,对[i,last] 中的任意迭代器k,*k 不满足。 stable_partition:相对稳定的使得符合某个条件的元素放在前面 (和上面的一样,只是位置 不变) 使用时根据需要选择合理的排序函数即可,所有的排序函数默认从小到大排序,可以定义自 己的比较方式。 2、二分系列 二分检索,复杂度O(log(last-first)) itr upper_bound(first,last,value,cmp); //itr 指向大于value 的第一个值(或容器末尾) itr lower_bound(first,last,value,cmp); //itr 指向不小于valude 的第一个值(或容器末尾) pairequal_range(first,last,value,cmp); //找出等于value 的值的范围O(2*log(last–first)) Binary_search(first,last,value)返回bool值,找到则true,否则false。 二分经常会与其他算法结合。 例:HDU 1496 #includeiostream #includealgorithm #includecstring usingnamespace std; intval[40010]; intmain() { pair int*,int*p; int a,b,c,d; while (cin ab c d) { if((a 0b 0 c 0d 0) ||(a 0b 0c 0d 0)){ cout 0 endl; continue; } memset(val,0,sizeof(val)); intk 0; for (int i -100;i 100;i++){ if(i 0) continue; for (intj -100;j 100;j++) { if(j 0) continue; val[k++] a*i*i +b*j*j; } } sort(val,val+k); int cnt 0; for (intj -100;j 100;j++) { if(j 0) continue; for (int i -100;i 100;i++) { if(i 0) continue; int sum c*j*j + d*i*i; p equal_range(val,val+k,-sum); cnt + p.second -p.first; } } cout cnt endl; } retu

文档评论(0)

138****7331 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档