当前位置: 首页 > news >正文

蓝桥杯备考:set容器用法(lower_bound)---营业额统计

如图所示,这道题的暴力解法就是枚举每天的营业额,让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方,我们是很有可能超时的

所以我们选择用set容器的二分查找功能

我们每次遍历到一个数的时候,前面的天的营业额要保证都插入进了set容器里

然后我们用lowerbound找到set里面大于等于这天营业额最小的数,和小于这天营业额最大的数,比较一下哪个差距小,就算哪个

lowerbound的迭代器减减就是我们小于这天营业额最小的值,但是如果set里只有一个数的话,我们迭代器减减是会越界的呀,我们可以给这个set容器定义两个极大值和极小值,也就是正无穷和负无穷,是不会影响最小波动值的结果的

实现一下代码

#include <iostream>
#include <set>
#include <cmath>
#include <cstdlib>
using namespace std;

typedef long long ll;
ll n;
const int INF = 0x3f3f3f3f;
const int N = 3e4;
ll a[N];
int main()
{
	set<int> st;
	ll ret = 0;
	cin >> n;
	int x;cin >> x;
	ret+=x;st.insert(x);
	 st.insert(-INF);
	 st.insert(INF);
	for(int i = 2;i<=n;i++)
	{
		ll x;cin >> x;
		auto it = st.upper_bound(x);
		auto tmp = it;
		tmp--;
		ret+=(min(abs(*it-x),abs(*tmp-x)));
		st.insert(x);
	}
	cout << ret << endl;
	
	
	return 0;
}

http://www.dtcms.com/a/67385.html

相关文章:

  • 30、Vuex 为啥可以进行缓存处理
  • ES6回顾:闭包->(优点:实现工厂函数、记忆化和异步实现)、(应用场景:Promise的then与catch的回调、async/await、柯里化函数)
  • 二进制求和(js实现,LeetCode:67)
  • 如何在宝塔mysql修改掉3306端口
  • 数据库系统概念全面解析
  • 【从零开始学习计算机科学】数据库系统(五)DBMS查询处理
  • 高德爬取瓦片和vue2使用
  • 【ubuntu】——wsl中使用windows中的adb
  • 深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现
  • Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
  • Spring Boot(十六):使用 Jenkins 部署 Spring Boot
  • 51单片机的keil c51软件安装教程
  • 鸿蒙开发-一多开发之媒体查询功能
  • [论文阅读]Demystifying Prompts in Language Models via Perplexity Estimation
  • Go语言 vs Java语言:核心差异与适用场景解析
  • MySQL 里的“锁”:保护数据的门卫
  • harbor v2.12.2 使用https公网访问
  • Linux中grep、sed和awk常见用法总结
  • OpenCV之颜色空间转换
  • 基于Vue3的流程图绘制库
  • (全)2024下半年真题 系统架构设计师 综合知识 答案解析01
  • 【软考网工-实践篇】NAT网络地址转换协议
  • 计算机三级网络技术知识汇总【9】
  • 开源工具利器:Mermaid助力知识图谱可视化与分享
  • 获取golang变量的类型
  • Figma的汉化
  • 【音视频开发】第二章 FFmpeg 开发环境
  • Unity制作的微信小游戏有关于多个游戏道具是否要对应多个激励视频广告
  • 银行卡归属地-BIN号与发卡行识别的实现逻辑
  • Leetcode7-整数反转