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

【luogu CF1098D】Eels(结论)

Eels

题目链接:luogu CF1098D

题目大意

有一个可重集,每次操作会放进去一个数或者取出一个数。
然后每次操作完之后,问你对这个集合进行操作,每次选出两个数 a,b 加起来合并回去,直到集合中只剩一个数,要你最小化 2a<b 或 2b<a 的次数。
每次输出这个最小次数。

思路

有一个简单的贪心结论是每次选最小的两个合并。
感性理解就是你如果要贡献了,那迟早都要贡献,你这里加了说不定他就够大了就不一定在下一次贡献了。

接下来发现你这样这题好像还不能过。
于是考虑再推一点结论,发现它贡献的条件我们还没有用上。
于是考虑一下这个二倍,会发现一个什么问题,就是如果你某一次要贡献。
比如贡献的形式是 x,yx,yx,y,其中 2x<y2x<y2x<y,那你其实会发现这个 yyy 是不可能是被合并出来的,它一定是原生的。

那如果它能被合出来 y1+y2=y(y1⩽y2)y_1+y_2=y(y_1\leqslant y_2)y1+y2=y(y1y2),那我们每次合最小的两个,那 y1,y2y_1,y_2y1,y2 已经被合了 xxx 还在,那一定有 y1⩽y2⩽xy_1\leqslant y_2\leqslant xy1y2x,那 y1+y2⩽2xy_1+y_2\leqslant 2xy1+y22xy⩽2xy\leqslant 2xy2xy>2xy>2xy>2x 矛盾。
也不难看出,当 kx<ykx<ykx<y 为条件的时候,两个推出来的条件分别是 y⩽2xy\leqslant 2xy2xy>kxy>kxy>kx,也就是当 k⩾2k\geqslant 2k2 的时候其实这个结论都成立,这也是这个条件成立的充要条件。

那这个说明什么,你如果要出现贡献,大的一定是原生的,而每次你都会合最小的两个,那要让大的是原生的也就是它是现在第二小的,而且比它大的里面不应该有非原生的。
因为有的话,就说明它肯定没有最小的二倍。
那最小的肯定就是原生的里面比他小的和。
那条件就是:(先把数组排序,在让 sumi=∑x=1iaxsum_i=\sum\limits_{x=1}^ia_xsumi=x=1iax
∑i=1n[2sumi−1<ai]\sum\limits_{i=1}^n[2sum_{i-1}<a_i]i=1n[2sumi1<ai]


那我们要做的就是在插入数和删去数的过程中维护这个东西的值。
会发现问题在于每个地方都要判断一次,但是一个显然的事情是每一次是上次的两倍以上,那每次这个值都会翻倍,那就只会有至多 log⁡\loglog 次贡献。
那你会发现如果你按最高位的存在来分(我们对于每个维护一个 set),那你会发现每一组至多只有一个贡献,那我们需要判断的次数也缩小到了 log⁡\loglog 级别,就可以了。

代码

#include<set>
#include<cstdio>
#define ll long longusing namespace std;int n, ans;
multiset <int> s[36];
ll sum[36];int getk(int x) {int re = 0;while (x > 1) re++, x >>= 1;return re;
}int main() {scanf("%d", &n);while (n--) {char c = getchar(); while (c != '+' && c != '-') c = getchar();int x; scanf("%d", &x);int k = getk(x);if (c == '-') {s[k].erase(s[k].find(x));sum[k] -= x;}if (c == '+') {s[k].insert(x);sum[k] += x;}ll Sum = 0; ans = 0;for (int i = 0; i <= 30; i++)if (s[i].size()) {ans += s[i].size();if ((*s[i].begin()) > 2 * Sum) ans--;Sum += sum[i];}printf("%d\n", ans);} return 0;
} 

相关文章:

【luogu CF1098D】Eels(结论)

Eels 题目链接&#xff1a;luogu CF1098D 题目大意 有一个可重集&#xff0c;每次操作会放进去一个数或者取出一个数。 然后每次操作完之后&#xff0c;问你对这个集合进行操作&#xff0c;每次选出两个数 a,b 加起来合并回去&#xff0c;直到集合中只剩一个数&#xff0c;要…...

【java】遍历文件夹输出所有文件的文件名与绝对路径,在windows环境

【java】遍历文件夹输出所有文件的文件名与绝对路径&#xff0c;在windows环境 String filepath "D:\\CloudMusic\\";//D盘下的file文件夹的目录File file new File(filepath);//File类型可以是文件也可以是文件夹File[] fileList file.listFiles();//将该目录下的…...

Window问题详解(下)

建议先看一下 Window问题详解(上) 思路② 既然会超时,那该怎么办呢? 显然需要一个更快速的方法来解决这个问题! 我们先来观察一下图片: 我们发现,每一次选中的数都会增加下一个。 !!!!! 因此,我们可以根据此特性优化时间!! 第一次先求出前 k − 1 k-1 k−...

Kafka部署与SpringBoot集成

Kafka与ZooKeeper Apache ZooKeeper是一个基于观察者模式的分布式服务管理框架&#xff0c;即服务注册中心。同时ZooKeeper还具有存储数据的能力。Kafka的每台服务器作为一个broker注册到ZooKeeper&#xff0c;多个broker借助ZooKeeper形成了Kafka集群。同时ZooKeeper会保存一…...

c++11 标准模板(STL)(std::unordered_set)(十三)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…...

【2023】DevOps、SRE、运维开发面试宝典之ELKStack相关面试题

文章目录 1、elasticsearch的应用场景2、elasticsearch的特点3、Elasticsearch集群三种状态分别是什么?代表什么?4、Elasticsearch集群的优化方面5、Elasticsearch集群防止脑裂的配置参数?6、ELK日志采集平台架构组件介绍?7、Logstash组件的作用?8、收集Kubernetes集群程序…...

Hive中的高阶函数(二)

1、UDTF之explode函数 explode(array)将array列表里的每个元素生成一行&#xff1b; explode(map)将map里的每一对元素作为一行&#xff0c;其中key为一列&#xff0c;value为一列&#xff1b; 一般情况下&#xff0c;explode函数可以直接使用即可&#xff0c;也可以根据需要结…...

Java集合知识点总结

ArrayListLinkedListLinkedHashSetHashSetTreeSetHashTableHashMapTreeMap是否有序有序有序有序无序自然排序&#xff08;Comparator&#xff09;进行排序&#xff0c;默认升序使用的是重写comparTo方法无序无序自动排序元素是否为空可为null可为null不允许可为null不允许键允许…...

培训班出身的同学简历怎么做?面试要注意哪些?来自资深大厂HR的忠告

目录 1 不少培训班候选人的简历中&#xff0c;缺乏足够的商业项目年限 2 直接描述培训班学习经历会带来的负面影响 3 大龄转行Vs年轻的初级程序员&#xff0c;公司一般会如何选择&#xff1f; 4 经过培训班突击后&#xff0c;可以先面试小公司 5 面试官怎么面试有培训班经历…...

Hive3.1.3安装部署_最小化部署_元数据MySQL部署_Hiveserver2部署_metastore部署---大数据之Hive工作笔记0012

hbase 实时分析 hive 离线分析 这里是新版本的hive3.1.3的安装 关于hive的原理之前的博客已经详细说了 可以看到上面是hive运行的原理图 词法分析 语法分析...

javascript:void(0) 含义

我们经常会使用到 javascript:void(0) 这样的代码&#xff0c;那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢&#xff1f;javascript:void(0) 中最关键的是 void 关键字&#xff0c; void 是 JavaScript 中非常重要的关键字&#xff0c;该操作符指定要计算一个表…...

不用机器学习不用大数据,给你讲通ChatGPT的深层原理

ChatGPT现在看来已经异常火爆了&#xff0c;很多人已经熟知&#xff0c;并且开始练习使用或者开始利用他开始实践了。但仍然有很多人在观望&#xff0c;在疑惑&#xff0c;今天狗哥不用那些高端大气的机器学习亦或是大数据还给你讲通ChatGPT深层到底是个啥逻辑。 目录 1. 聊家…...

JavaScript中的循环类型

JavaScript 中有三种主要的循环类型: for、while 和 do...while。 for: 循环指定次数。 例如&#xff1a; for (let i 0; i < 5; i) {console.log(i); } while: 当条件为真时循环。 例如&#xff1a; let i 0; while (i < 5) {console.log(i);i; } do...while: 先执…...

Spring Boot+Vue前后端分离项目练习02之网盘项目利用token进行登陆验证

1.添加依赖 首先需要添加jwt对应的依赖。 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>2.添加配置 JWT由三部分构成&#xff0c;分别是 header, pa…...

springcloud常见面试题(2023最新)

目录前言一.微服务1.微服务是什么&#xff1f;2.你知道哪些RPC框架3.springCloud和Dubbo有什么区别4. SpringCloud由什么组成二.Spring Cloud Eureka1.Eureka包含几个组件2.Eureka的工作原理3.说一下什么是Eureka的自我保护机制4.什么是CAP原则5.都是服务注册中心&#xff0c;E…...

用户态驱动的两种方式-ixy学习

介绍在Linux下有两种启用用户态驱动的子系统&#xff1a;一个是UIO&#xff0c;另一个是VFIO&#xff0c;ixy这两种都支持。 UIO通过虚拟文件系统sysfs下的内存映射文件来暴露所有必要的接口以完成用户态的驱动。这些基于文件的系统调用接口给了我们充足的权限来获取设备资源而…...

机器学习 | 线性回归(单变量)

前文回顾&#xff1a;机器学习概述&#x1f4da;线性回归概念我们要使用一个数据集&#xff0c;数据集包含俄勒冈州波特兰市的住房价格。在这里&#xff0c;我要根据不同房屋尺寸所售出的价格&#xff0c;画出我的数据集。比方说&#xff0c;如果你朋友的房子是 1250 平方尺大小…...

C++基础知识【3】控制语句

目录 前言 一、条件语句 1.1、if 语句 1.2、if-else 语句 1.3、switch 语句 二、循环语句 2.1、while 循环 2.2、do-while 循环 2.3、for 循环 三、跳转语句 3.1、break语句 3.2、continue语句 3.3、goto语句 四、一些新特性 4.1、if 语句和 switch 语句…...

ImportError: Can not find the shared library: libhdfs3.so解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

Qt插件开发总结5--主界面嵌入插件UI

文章目录一、前言二、效果展示三、嵌入插件UI1、插件接口文件添加UI指针2、插件子项目工程建立UI类3、插件类中创建UI类、使UI指针指向创建的UI类4、插件元信息中添加widget键值对&#xff0c;指示插件UI嵌入主界面中的位置5、主界面中预留接入点tabWidget6、插件管理器中元数据…...

Qwen3-TTS-VoiceDesign参数详解:Temperature与Top P加点调优指南

Qwen3-TTS-VoiceDesign参数详解&#xff1a;Temperature与Top P加点调优指南 你是不是也遇到过这样的问题&#xff1a;用AI生成语音时&#xff0c;明明输入了“开心的语气”&#xff0c;出来的声音却平淡得像在念说明书&#xff1f;或者想要“悲伤一点”&#xff0c;结果听起来…...

【VS Code】Windows10下VS Code配置Graphviz和DOT语言环境:从零开始到高效绘图

1. 为什么选择GraphvizDOTVS Code组合&#xff1f; 如果你经常需要绘制流程图、组织结构图或者算法示意图&#xff0c;一定遇到过这些烦恼&#xff1a;用鼠标拖拽调整图形太费时间&#xff0c;修改布局要反复操作&#xff0c;多人协作时版本混乱。GraphvizDOT语言正是为解决这些…...

零基础快速入门前端蓝桥杯Web应用开发 DOM 核心知识点(适配省赛/国赛高频考点)(可用于备赛蓝桥杯Web应用开发)

DOM 是蓝桥杯 Web 赛道的必考核心&#xff0c;贯穿所有实操编程题&#xff0c;从基础元素获取到复杂交互、性能优化均有覆盖&#xff0c;以下按考点优先级和模块完整梳理&#xff0c;适配历年真题考情。 一、DOM 基础认知与元素获取&#xff08;所有题的前置基础&#xff0c;1…...

微信小程序结合HTTP接口打造智能门锁远程控制系统

1. 为什么选择微信小程序控制智能门锁&#xff1f; 每次出门都要检查钥匙带没带的日子该结束了&#xff01;用微信小程序控制智能门锁&#xff0c;就像把门禁系统装进了每天必用的微信里。我去年给公司办公室装了这个系统&#xff0c;现在同事们刷脸进门、手机远程开门两不误&a…...

OpenClaw隐私保护方案:百川2-13B本地化部署处理敏感数据实战

OpenClaw隐私保护方案&#xff1a;百川2-13B本地化部署处理敏感数据实战 1. 为什么选择本地化部署处理敏感数据 去年我在帮一家小型律所做文档自动化改造时&#xff0c;遇到了一个棘手问题。他们需要从大量客户合同中提取关键条款&#xff0c;但合同内容涉及大量商业机密和客…...

3个步骤解锁QQ音乐加密文件:QMCDecode让音乐重获自由

3个步骤解锁QQ音乐加密文件&#xff1a;QMCDecode让音乐重获自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转…...

amsmath宏包完全使用手册:从解决符号显示问题到专业公式排版

amsmath宏包完全使用手册&#xff1a;从解决符号显示问题到专业公式排版 在科研论文、技术文档或数学教材的写作过程中&#xff0c;LaTeX作为专业的排版工具已经成为学术界的标准选择。而数学公式的排版&#xff0c;则是LaTeX最引以为傲的功能之一。然而&#xff0c;即使是经验…...

小程序签名组件避坑指南:从米字格绘制到图片生成的完整流程

小程序签名组件开发实战&#xff1a;从米字格绘制到图片生成的深度解析 在小程序开发中&#xff0c;签名功能的需求日益增多&#xff0c;无论是电子合同签署、教育类应用的字帖练习&#xff0c;还是个性化签名设计&#xff0c;都需要一个稳定高效的签名组件。本文将深入探讨如何…...

别啃书了!用这款70块的Steam游戏《Turing Complete》,手把手带你从逻辑门拼出CPU

从逻辑门到CPU&#xff1a;用《Turing Complete》重构计算机组成原理学习体验 当我在大学第一次翻开《计算机组成原理》教材时&#xff0c;那些密密麻麻的逻辑门符号和抽象的数据通路图让我头皮发麻。直到在Steam上发现标价70元的《Turing Complete》——这款看似简单的电路模拟…...

告别蜗牛速度!优麒麟20.04 LTS换源华为云镜像保姆级教程

优麒麟20.04 LTS提速指南&#xff1a;华为云镜像配置全解析 每次在优麒麟上安装软件时&#xff0c;看着进度条像蜗牛一样缓慢前进&#xff0c;是不是让你感到无比焦虑&#xff1f;特别是当你急需某个工具完成工作时&#xff0c;漫长的等待简直让人抓狂。作为一款基于Ubuntu的国…...