loj10005数列极差
题目描述
佳佳的老师在黑板上写了一个由 n个正整数组成的数列,要求佳佳进行如下操作:每次擦去其中的两个数 a 和 b,然后在数列中加入一个数 a*b+1,如此下去直至黑板上剩下一个数为止,在所有按这种操作方式最后得到的数中,最大的为 max,最小的为 min, 则该数列的极差定义为 M=max-min。
由于佳佳忙于准备期末考试,现请你帮助他,对于给定的数列,计算出相应的极差M 。
输入格式
第一行为一个正整数 n 表示正整数序列的长度;
在接下来的 n 行中,每行输入一个正整数。
接下来的一行有一个 0,表示数据结束。
输出格式
输出只有一行,为相应的极差d 。
样例
样例输入
3
1
2
3
0
样例输出
2
数据范围与提示
对于全部数据n<=50000,保证所有数据计算均在 32 位有符号整数范围内。
_____________________________________________
贪心,题目很简单。
主要联系priority_queue了,不要用。不如heap好用。主要问题出在仿函数上。
优先队列中直接用仿函数不行,要用结构体内重载运算符,或者重新定义一个结构体,在结构体内重载小括号(),当然也就是仿函数。没有heap灵活好用!
_____________________________________________


1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=5e4+10;
4 int n,mx,mn;
5 int sz[maxn];
6 vector<int>q,p;
7 bool cmp(int x,int y)
8 {
9 return x>y;
10 }
11
12 int main()
13 {
14 scanf("%d",&n);
15 for(int x,i=1;i<=n;++i)
16 {
17 scanf("%d",&x);
18 q.push_back(x);
19 push_heap(q.begin(),q.end());
20 p.push_back(x);
21 push_heap(p.begin(),p.end(),cmp);
22 }
23 scanf("%d",&mn);
24 while(q.size()>1)
25 {
26 int a=q[0];
27 pop_heap(q.begin(),q.end());q.pop_back();
28 int b=q[0];
29 pop_heap(q.begin(),q.end());q.pop_back();
30 q.push_back(a*b+1);
31 push_heap(q.begin(),q.end());
32 }
33 mn=q[0];
34 while(p.size()>1)
35 {
36 int a=p[0];
37 pop_heap(p.begin(),p.end(),cmp);p.pop_back();
38 int b=p[0];
39 pop_heap(p.begin(),p.end(),cmp);p.pop_back();
40 p.push_back(a*b+1);
41 push_heap(p.begin(),p.end(),cmp);
42 }
43 mx=p[0];
44 cout<<mx-mn;
45 return 0;
46 }
loj10005数列极差的更多相关文章
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- LibreOJ一本通题解报告
网页跳转 解析啥的以后会有的 目录 ·T1活动安排 ·T2种树 ·T3喷水装置 T1活动安排 /* problem:yibentong10000 date:2019/4/21 author:Lonel ...
- loj题目总览
--DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...
- CSU训练分类
√√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...
- YBT 1.1 贪心算法
本人因为过于懒所以以后就将题解放进原文件中,存入百度网盘,自行下载,里面包含题目网站,源文件,与相应题解(这次没有写) 链接: https://pan.baidu.com/s/1eSoQ_LFWMxF ...
- LOJ 一本通一句话题解系列:
第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- BZOJ1500[NOI2005]维修数列
Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一 ...
- PAT 1049. 数列的片段和(20)
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1 ...
随机推荐
- VS Code 自动化连接非固定IP地址EC2实例的解决方案
问题描述 大家可能和我一样,平时在AWS上启动一台安装有Linux EC2实例作为远程开发机. (注:这里的EC2实例是配置用私钥进行登录的) 通常,你可以选择申请一个Elastic IP绑定到这台开 ...
- Net Core(Net5) 部署到不同操作系统遇到问题的解决方法
Net Core(Net5) 部署到不同操作系统的解决方法 目录 Net Core(Net5) 部署到不同操作系统的解决方法 1 系统版本升级补丁 1.1应用程序部署时VC无法安装,导致应用程序缺少配 ...
- hive向es推送数据
第一步:首先要保证网络是通的,很多公司里子网遍布,要和运维和工程侧同事确认好网络是通的,es的地址可以通过curl es地址的方式测试一下. 第二步:下载需要的jar包,必须的是es-hadoop的包 ...
- Kafka 消费组消费者分配策略
body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...
- File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?
重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...
- 关于Iterator
1.在迭代过程中,用list来删除元素的坑 1 package test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 ...
- 第三章 IP地址规划设计技术(很重要)
知识重点: 选择题考点 IP基础(网络地址.子网掩码) 网络地址转换 NAT 的原理 CIDR (计算方法) IPv6 地址表示 综合题 IP地址的分类与计算 VLSM 地址规划 3.1 基础知识 3 ...
- Spark MLlib中KMeans聚类算法的解析和应用
聚类算法是机器学习中的一种无监督学习算法,它在数据科学领域应用场景很广泛,比如基于用户购买行为.兴趣等来构建推荐系统. 核心思想可以理解为,在给定的数据集中(数据集中的每个元素有可被观察的n个属性), ...
- Navicat Premium 12连接MySQL数据库出现Authentication plugin 'caching_sha2_password' cannot be loaded的解决方案
1. 管理员权限运行命令提示符,登陆MySQL mysql -u root -p password 2. 修改账户密码加密规则并更新用户密码 ALTER USER 'root'@'localhost' ...
- Windows server 安装远程桌面及破解120天时间限制授权
一.问题描述 Windows Server系列服务器默认远程桌面连接数是2个用户(本文适用于所有Windows Server系列服务器),如果多余两个用户进行远程桌面连接时,系统就会提示超过连接数,可 ...