长度不超过n的连续最大和___优先队列
题目链接:
https://nanti.jisuanke.com/t/36116
题目:
在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币。但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币。因为这些数字都是可见的,所以大家都是不会出现的赔的情况。
游戏规则:每人只能抓一次,只能抓取一段连续的纸团,所有纸团上的数字和就是你可以获得的蒜币。
蒜头君作为蒜厂的一员在想,我怎么可以获得最多的蒜币呢?最多能获取多少蒜币呢?
因为年会是发奖,那么一定有大于 00 的纸团。
输入格式
第一行输入一个整数 nn,表示有 nn 个纸团。
第二行输入输入 nn 个整数 a_iai,表示每个纸团上面写的数字(这些纸团的输入顺序就是环形桌上纸团的摆放顺序)。
输出格式
输出一个整数,表示蒜头君最多能获取多少蒜币。
数据范围
对于 30\%30% 的数据:1 \le n \le 10^2,-10^3 \le a_i \le 10^31≤n≤102,−103≤ai≤103。
对于 60\%60% 的数据:1 \le n \le 5 \times 10^3,-10^6 \le a_i \le 10^61≤n≤5×103,−106≤ai≤106。
对于 100\%100% 的数据:1 \le n \le 10^5,-10^9 \le a_i \le 10^91≤n≤105,−109≤ai≤109。
样例输入
3
1 -2 1
样例输出
2
题目来源
2019 蓝桥杯省赛 B 组模拟赛(一)
分析: 求循环的连续最大和.
循环好解决: 把数组首尾连成2n长的.
然后就是求长度不超过n的最大连续和.
一般求连续和 直接用前缀和,然后逐步做差即可.
但是这儿有个限制,要求长度不超过n. 所以我们可以用优先队列:
维护一个结构体
struct node {
ll val;
int index;
};
根据index判断一下长度是否超过n即可.
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e5+; ll arr[maxn * ]; struct node {
ll val;
int index;
bool operator < (const node &a) const {
if (val != a.val) return val > a.val;
return index > a.index;
}
node () {}
node (ll vv, int ii) : val(vv), index(ii) {}
}; int main() {
ios::sync_with_stdio(false);
int n;
cin >> n;
for (int i=; i<n; ++i)
cin >> arr[i];
for (int i=n; i<*n; ++i)
arr[i] = arr[i-n];
for (int i=; i<*n; ++i)
arr[i] = arr[i] + arr[i-];
ll res = -8626213631111ll;
ll tans;
priority_queue<node> pq;
for (int i=; i< * n; ++i) {
if (pq.empty()) tans = arr[i];
if (tans > res) res = tans;
while (!pq.empty()) {
node tmp = pq.top();
if (i - tmp.index >= n) {
pq.pop();
continue;
} else {
tans = arr[i] - tmp.val;
break;
}
}
if (tans > res) res = tans;
pq.push({arr[i], i});
}
cout << res << endl; return ;
}
长度不超过n的连续最大和___优先队列的更多相关文章
- ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和
题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...
- 限制标题字符串的长度,超过长度的截取并加上"..."
/// <summary> /// 限制标题字符串的长度,超过长度的截取并加上"..." /// </summary> /// <param name ...
- NYOJ-104最大和(动归题)及连续最大和核心
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩 ...
- js 只能输入英文和数字,且首位必须是字母,字母总数不能超过3个,总长度不能超过20!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- MySQL innodb的组合索引各个列中的长度不能超过767,
MySQL索引的索引长度问题 MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制. 在MyISAM表中,创建组合索引时,创建的索引长度不能超过1000,注意这里索 ...
- 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现。
问题 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现. 源程序 data segment hintinput db "plea ...
- 求区间连续不超过K段的最大和--线段树+大量代码
题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...
- MQTT 协议 Client ID 长度不能超过23个字符
今天遇到一个MQTT的问题,MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时,无法链接MQTT服务器. 经过查看协议发现:客户 ...
- POJ 2479 两段连续最大和
题目大意: 在一组数中,找到连续的两段 , 是这两段相加和达到最大 这里利用dp[2][N]的数组保存所有的状态 dp[0][i]表示取到第i个数时只取了一段的最大和,第i个数是一定要被取到的 dp[ ...
随机推荐
- 变量和关系符和JAVA基本类型笔记与常考面试题
变量的类型:数值型:整型(byte,short,int,long).浮点型(float,double)非数值型:布尔类型(boolean),字符型(char),字符串类型(String),其他引用型 ...
- EXEC sp_executesql with multiple parameters
传递多个参数 https://stackoverflow.com/questions/28481189/exec-sp-executesql-with-multiple-parameters http ...
- 微信小程序实现部分双向数据绑定(为input、picker、textarea编写统一的更新数据逻辑)
wepy开发小程序 以input为例,微信小程序没有数据双向绑定,input要显示绑定的数据即value等于一个绑定的量 <input type="text" value=& ...
- TASE2017
PATTERN系列之五 I. Introduction To ease the expression of real-time requirements, Dwyer, and then Konrad ...
- LINQ之路13:LINQ Operators之连接(Joining)
Joining IEnumerable<TOuter>, IEnumerable<TInner>→IEnumerable<TResult> Operator 说明 ...
- Anaconda安装mysqldb模块
在anaconda里mysqldb是封在mysql-python里的,所以要先在anaconda prompt里运行 conda install mysql-python.(注意要右键选管理员身份)有 ...
- LINQ to Entities 不识别方法“System.String get_Item(Int32)”,因此该方法无法转换为存储表达式。
1.LINQ to Entities 不识别方法“System.String get_Item(Int32)”,因此该方法无法转换为存储表达式.项目中发现linq to entities 不识别? , ...
- vue-路由懒加载
将import ... from..改为 const Foo = resolve => require(['./Foo.vue'], resolve)
- python内置类型:列表,包括 list 和 tuple
列表list 是一种有序的集合 ,假定list的名字为class list的元素个数:len( class) 访问元素: a. 索引从0开始 b. 也可以使用[-1],[-2],[-3] 从后面 ...
- Starting MySQL....The server quit without updating PID file[失败]/lib/mysql/ip12189.pid). 错误一例
[root@ip12189 etc]# service mysqld startStarting MySQL....The server quit without updating PID file[ ...