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.mzph.cn/pingmian/10476.shtml

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

相关文章

第十五届蓝桥杯C++大学A组压轴题解:封印宝石

题目&#xff1a;第十五届蓝桥杯C大学A组省赛压轴题 题目传送门 题意&#xff1a;将n个数放在n个位置上&#xff0c;每个数只能放在它自己之前的位置上&#xff0c;且离自己多远就花费多少代价&#xff0c;可以有没放的数&#xff0c;给出最大代价要求最后放的数排成的字典序…

Java 常见集合类

集合的整体框架 Java 的集合&#xff0c;也可以叫做容器&#xff0c;根据集合的整体框架可以看出&#xff0c;主要是两大集合接口&#xff1a;第一个是 Collection 接口&#xff0c;主要用来存放单一的元素对象&#xff1b;另一个是 Map 接口&#xff0c;主要用于存储键值对。…

Compose 重组

文章目录 Compose 重组概述重组特性组件会按任意顺序运行组件并行运行重组更新部分组件重组是乐观操作 重组作用域 Compose 重组 概述 组合阶段用于生成并维护 LayoutNode 视图树&#xff0c;当使用 Activity 中的 setContent() 时&#xff0c;会开始首次组合&#xff0c;这时…

小程序获取手机号,用户昵称,头像

一、手机号 在微信小程序中&#xff0c;获取用户手机号也需要用户的明确授权。你可以使用 button 组件的 open-type 属性设置为 getPhoneNumber 来实现这个功能。当用户点击这个按钮时&#xff0c;会弹出一个对话框请求用户的授权。如果用户同意&#xff0c;你可以在 bindgetp…

在学习uni-app过程中使用的css样式记录

在学习uni-app过程中&#xff0c;记录下使用的css样式&#xff0c;持续更新 <style lang"scss" scoped> // lang"scss":是定义样式的方式&#xff1b;scoped&#xff1a;只在当前页面生效的样式 width: 100vw; //设置宽&#xff0c;单位px、%、vw&…

通过三重循环遍历来寻找两个顶点之间的最短路径[示例]

弗洛伊德-沃舍尔算法&#xff08;Floyd-Warshall Algorithm&#xff09;是一种用于解决所有节点对之间最短路径的动态规划算法。它能够有效地计算出图中任意两个节点之间的最短路径长度。 这个算法的基本思想是通过逐步迭代来寻找两个顶点之间的最短路径。它的核心思想是利用中…

知识付费语音问答系统的商业模式,在线教育有哪些付费推广渠道?

在线教育越发火热&#xff0c;那么竞争也就越激烈。目前在线教育行业有一大痛点那就是难以获取用户&#xff0c;在这种情况下光靠免费渠道获取流量是远远不够的。那么在线教育付费推广方法有哪些? 1、SEM&#xff1a; SEM就是大家常说的竞价广告&#xff0c;包括百度竞价、360…

前端内嵌iframe网页单点登录的三种方式

背景&#xff1a;我们开发中会遇到让内嵌的iframe进行登录&#xff0c;但是有希望是单点登录&#xff0c;不想多次登录 目录 方法一&#xff1a;共享sessionStorage或localStorage 方法二&#xff1a;设置内嵌iframe的url参数 方法三&#xff1a;通过父子页面通信postMessage…

共赴科技盛会“2024南京智博会”11月在南京国际博览中心召开

2024年&#xff0c;南京这座历史悠久的文化名城迎来了一场科技与智慧交织的盛会——南京智博会|南京国际智慧城市、物联网、大数据。本次博览会以智慧城市、人工智能、消费电子、物联网、大数据为主题&#xff0c;汇聚了全球各地的智能科技精英&#xff0c;共同探讨智慧城市建设…

46 udp网络程序

查询网络服务的命令 netstat -nlup n: 显示数字 a&#xff1a;显示所有 u&#xff1a;udp服务 p&#xff1a;显示pid Recv-Q收到的数量&#xff0c;本地ip和远端ip&#xff0c;00表示可以收到任何地址 网络聊天 服务端 定义一个server类&#xff0c;成员保存ip地址&#xff…

龟兔赛跑(基于GUI与多线程实现)

直击龟兔赛跑现场 下面这张图是我们设计龟兔赛跑界面的初始效果与基本组成结构&#xff1a; 接下来是我仅代表我个人提出的一些疑问与解答&#xff1a; 1、俩动物以图片的形式显示&#xff1f; 其实在这里两个动物类就像标签一样 标签组件是什么&#xff1f;用于短文本字符串…

从loss角度理解LLM涌现能力

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

云贝教育 |【直播课】5月19日Oracle 19c OCM认证大师课 即将上课了!(附课件预览)

贝教育独家认证课OCM全网价格最低&#xff0c;性价比最高&#xff01;&#xff01;&#xff01; Oracle 19c OCM认证大师培训 - 课程体系 - 云贝教育 (yunbee.net) OCM部分课件预览 Oracle Database 19c Certified Master Exam (OCM) 认证大师 25 天 / 150课时 什么是Oracle 1…

0X JavaSE-- UML、

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

启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS

ESP32-C3因为其性价比高&#xff0c;价格便宜性能又好一直是量产的首选芯片&#xff0c;随着量产项目扩大&#xff0c;对接云服务器的情况也增加了&#xff0c;接下来小启给大家分享下启明云端ESP32-C3模组——WT32C3系列模组/开发板连接AWS亚马逊云方法。 WT32C3系列模组 WT3…

笨方法自学python(一)

我觉得python和c语言有很多相似之处&#xff0c;如果有c语言基础的话学习python也不是很难。这一系列主要是学习例题来学习python&#xff1b;我用的python版本是3.12 代码编辑器我用的是notepad&#xff0c;运行py程序用cmd 现在开始写第一个程序&#xff1a; print ("…

ViLT 浅析

ViLT 浅析 论文链接&#xff1a;ViLT 文章目录 ViLT 浅析创新点网络结构总结 创新点 本文先分析了4种不同类型的Vision-and-Language Pretraining(VLP) 其中每个矩形的高表示相对计算量大小&#xff0c;VE、TE和MI分别是visual embedding、text embedding和modality interact…

Excel 根据分类及组内序号进行编码

例题描述和简单分析 Excel 记录课程数据&#xff0c;未排序&#xff0c;部分如下&#xff1a; ABC1CourseDateTime2Word1-Sep-209:003Word1-Sep-209:004PowerPoint1-Sep-209:005Word1-Sep-2012:006PowerPoint1-Sep-2012:007Excel1-Sep-2012:008Word1-Sep-2012:00 现在要新增…

【CAD建模号】学习笔记(四):工作平面

工作平面介绍 CAD建模号右侧导航栏提供了很多便捷的工具&#xff0c;有测量工具、坐标系、模型和图层切换、视图切换等。 1. 测量工具组 测量工具可以测量图形的几何体积&#xff0c;长度&#xff0c;角度等。工具组包含如下&#xff1a; 测量几何&#xff1a;可以测量图形的面…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…