stl学习以及abc比赛例题

1.引例

一提到查找,我们一上来想的肯定是find()函数或者search()函数,但是这种查找的底层逻辑终究是用顺序查找的方式,运行的时间成本非常高昂,所以平时能不用就不用,比赛的时候用这种查找和自己while遍历,for遍历都是一个样,时间复杂度过高

但是在C++的stl里面有两个十分好用的函数,lower_bound()和upper_bound(),这两个函数的查找逻辑是二分查找,相比于上面的,在时间复杂度上更加小,运行成本更低

2.用法

lower_bound(start,end,value) 用于二分查找区间内第一个 大于等于某值(>= x) 的位置
upper_bound(start,end,value)用于二分查找区间内第一个 大于某值(> x) 的位置

说明一下参数的含义

start:起始迭代器的位置

end:终止迭代器的位置

注意:这些函数的范围,都是左开右闭,也就是说实际的作用范围为[start,end)

value:要查找的值,如果成功,则返回正确的迭代器的位置

但是如果搜遍了整个序列也没有找到合适的值,那么将返回end迭代器的位置

展示

lower_bound

#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;int a[20];for(int i=1;i<=n;i++){cin>>a[i];}int flag1=lower_bound(a+1,a+n+1,2)-a;int flag2=lower_bound(a+1,a+n+1,5)-a;int flag3=lower_bound(a+1,a+n+1,9)-a;printf("%d  %d  %d\n",flag1,flag2,flag3);return 0;
}

解释:第一个>=2的位置是2,第一个>=5的位置是3,第一个>=9的位置是5 

upper_bound

#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;int a[20];for(int i=1;i<=n;i++){cin>>a[i];}int flag1=upper_bound(a+1,a+n+1,2)-a;int flag2=upper_bound(a+1,a+n+1,5)-a;int flag3=upper_bound(a+1,a+n+1,9)-a;printf("%d  %d  %d\n",flag1,flag2,flag3);return 0;
}

解释:第一个>2的位置是2,第一个>5的位置是4,第一个>9的位置是5 

 

3.例题 

这边例题我也就直接甩一个abc比赛上的例题了,因为还算简单,就是重要的是想到二分这个过程

题解:这题就是说有一个数组,每次选取数组里面的两个数去加起来然后取模1e8,这道题一开始我用的暴力,结果直接在第六个数据点就开始时间超限了,后续我想到了用数学思维去解决这道题目,因为我们每次都是两个数加起来,不会大于2e8因此,我们就可以得出一个结论,只要大于1e8就直接减去1e8即可,然后,我们就对这个数组进行排序,然后用lower_bound去查找右边第一个满足两数加起来是 要>=1e8,这样就可以把暴力的O(n^2)的时间复杂度缩短到O(nlogn)的时间复杂度,这样就可以AC这道题了

#include<bits/stdc++.h>
using namespace std;
const long long N=3*1e5+5;
const long long M=1e8;
long long a[N];
long long n;
long long sum=0;
bool cmp(long long fx,long long fy){return fx<fy;
} 
int main() 
{scanf("%lld",&n);for(long long i=1; i<=n; i++) {scanf("%lld",&a[i]);sum+=a[i]*(n-1);}sort(a+1,a+1+n,cmp);for(long long i=1; i<n; i++) {long long k=lower_bound(a+1+i,a+1+n,M-a[i])-a;sum-=M*(n-k+1);}printf("%lld",sum);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/690405.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven 的仓库、周期和插件

优质博文&#xff1a;IT-BLOG-CN 一、Maven 仓库 在Maven的世界中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称为构建。Maven在某个统一的位置存储所有项目的共享的构建&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。任何的构建都有唯一…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 驾校管理 设计与实现

一.项目介绍 系统角色&#xff1a;管理员、驾校教练、学员 管理员&#xff1a; 个人中心&#xff1a;修改密码以及个人信息修改 学员管理&#xff1a;维护学员信息&#xff0c;维护学员成绩信息 驾校教练管理&#xff1a;驾校教练信息的维护 驾校车辆管理&…

从0开发、发布油猴脚本(保姆级)

概览 项目中使用conify集成图标&#xff0c;有些内网用户只能使用离线图标&#xff0c;但是如何判断使用的conify集成图标是在线还是离线呢&#xff1f;这个时候就需要一个油猴脚本&#xff0c;作用于iconify官网&#xff0c;对离线图标进行标识。 此篇文章主要从如下几点去梳…

ITMS-91053: Missing API declaration

1. 添加PrivacyInfo.xcprivacy File → New → File → App Privacy 2. 格式 3. 已知对应关系 NSPrivacyAccessedAPICategoryFileTimestamp 3B52.1: Files provided to app by user, per documentation&#xff1a;File Timestamp NSPrivacyAccessedAPICategoryDiskSpace …

企业设置,支持自定义短信签名

05/08 主要更新模块概览 自动换行 启动封面 使用统计 短信签名 01表单管理 1.1 【表单外链】- 查询外链支持多个外链 说明&#xff1a; 表单查询外链原仅支持一个&#xff0c;现支持增加多个外链功能&…

从loss角度理解LLM涌现能力

如今的很多研究都表明小模型也能出现涌现能力&#xff0c;本文的作者团队通过大量实验发现模型的涌现能力与模型大小、训练计算量无关&#xff0c;只与预训练loss相关。 作者团队惊奇地发现&#xff0c;不管任何下游任务&#xff0c;不管模型大小&#xff0c;模型出现涌现能力…

D - Another Sigma Problem(ABC)

思路&#xff1a;我们可以处理一个后缀来记录当前数a[i]需要乘上多少&#xff08;类似于1110这样的&#xff09;&#xff0c;然后对于当前位来说&#xff0c;对答案的贡献还要加上(i - 1) * a[i]&#xff0c;因为a[i]还要做前(i - 1)个数的后缀。 代码&#xff1a; #include &…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git&#xff0c;本质上还是使用本地安装的Git软件&#xff0c;所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

信息检索(36):ConTextual Masked Auto-Encoder for Dense Passage Retrieval

ConTextual Masked Auto-Encoder for Dense Passage Retrieval 标题摘要1 引言2 相关工作3 方法3.1 初步&#xff1a;屏蔽自动编码3.2 CoT-MAE&#xff1a;上下文屏蔽自动编码器3.3 密集通道检索的微调 4 实验4.1 预训练4.2 微调4.3 主要结果 5 分析5.1 与蒸馏检索器的比较5.2 …

Excel 分组汇总后删除明细

有 Excel 数据如下所示&#xff1a; IDCriteria1Criteria2Criteria3Criteria4101210271239312381236123171826182918239182120182147 需要按 ID 分组汇总其余列&#xff0c;结果如下&#xff1a; IDCriteria1Criteria2Criteria3Criteria410121027123932561826939267 解法及简…

[Kubernetes] Istio on Kubernetes 实践

文章目录 1.Kubernetes 创建2.Istio 部署2.1 下载 Istio2.2 安装 Istio 3.Istio on Kubernetes 实践3.1 部署 Bookinfo 示例应用3.2 确定入站 IP 和端口 1.Kubernetes 创建 主机名内部ip外部ipmaster192.168.66.2139.198.36.40node1192.168.66.3139.198.1.192node2192.168.66.…

0X JavaSE-- UML、

# Unified Modeling Language UML 统一建模语言 UML 是一种图形化的语言。 UML 不是专门为 Java 准备的。 只要是面向对象的编程语言&#xff0c;开发前的设计&#xff0c;都需要画 UML 图进行系统设计。 最常用的四个 UML 图是 类图&#xff08;Class Diagram&#xff09;&…