当前位置: 首页 > 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;
}

相关文章:

  • 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的流程图绘制库
  • 六省会共建交通枢纽集群,中部离经济“第五极”有多远?
  • 上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 华东政法与复旦上医签署合作框架协议,医学与法学如何交叉融合?
  • 上海黄浦江挡潮闸工程建设指挥部成立,组成人员名单公布
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长
  • A股午后拉升,沪指收复3400点:大金融发力,两市成交超1.3万亿元