码迷,mamicode.com
首页 > 其他好文 > 详细

Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)

时间:2018-10-02 22:34:29      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:pre   ORC   遇到   code   使用   space   main   max   代码   

传送门

在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习。

unique函数

在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

STL中关于二分查找的函数有三个lower_bound 、upper_bound  。这两个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。

思路:枚举每个数的倍数,然后二分查找第一个小于该倍数的数字,维护一下最大的答案就可以了。

代码:

技术分享图片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <set>
 6 #define INF 0x3f3f3f3f3f
 7 
 8 using namespace std;
 9 typedef long long ll;
10 const int maxn = 2e5+5;
11 int buf[maxn];
12 
13 
14 int main()
15 {
16     int n;
17     scanf("%d",&n);
18     memset(buf, -1, sizeof(buf));
19     for(int i = 0; i < n; i++)
20     {
21         scanf("%d",&buf[i]);
22     }
23     sort(buf, buf + n);
24     n = unique(buf, buf + n) - buf;//去重
25     int ans = 0,t;
26     for(int i = 0; i < n; i++)
27     {
28         for(int j = buf[i]; j <= buf[n-1]; j += buf[i])
29         {
30             int pos = lower_bound(buf+i, buf+n, buf[i]+j) - buf - 1;//是从buf[i]的2倍开始搜的
31             //printf("pos:%d\n",buf[pos]);
32             t = buf[pos] % buf[i];
33             ans = max(ans, t);
34             if(t == buf[i] - 1)
35                 break;
36         }
37     }
38     printf("%d\n",ans);
39     return 0;
40 }
View Code

 

Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)

标签:pre   ORC   遇到   code   使用   space   main   max   代码   

原文地址:https://www.cnblogs.com/sykline/p/9737843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!