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


    传送门

    在看大佬的代码时候遇到了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
    ",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
    ",ans);
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    HttpWebRequest代理访问网站
    一段获得天气信息的.net代码
    C# 加密解密(DES,3DES,MD5,Base64) 类
    Windows 8 电话激活密钥。(更新至 20130721)
    微软官方的一段JavaScript判断.net环境
    我的第一篇。以后在这个记录我的点点滴滴。。。
    Linux 2.6内核中新的锁机制RCU
    再见,viewDidUnload方法
    Mechanical Sympathy
    Why should a selfimplemented getter retain and autorelease the returned object
  • 原文地址:https://www.cnblogs.com/sykline/p/9737843.html
Copyright © 2020-2023  润新知