长度不超过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[ ... 
随机推荐
- python学习笔记:深浅拷贝的使用和原理
			在理解深浅拷贝之前,我们先熟悉下变量对象和数据类型 1.变量和对象 变量-引用-对象(可变对象,不可变对象) 在python中一切都是对象,比如[1,2],'hello world',123,{'k1 ... 
- 3. Dubbo原理解析-Dubbo内核实现之动态编译 (转)
			转载自 斩秋的专栏 http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 我们运行的Java代码,一般都是编译之后的字节码 ... 
- Jenkins介绍和安装及配合GitLab代码自动部署
			Jenkins是什么? 基于JAVA的开源的自动化系统平台 加速自动化CI,CD任务及流水线,所有类型的任务:构建,测试,部署等 丰富的插件生态系统支持功能扩展,1400+插件和SCM,测试,通知,报 ... 
- 本地构建:Gulp
			Gulp中文网:https://www.gulpjs.com.cn/ Gulp英文网:https://gulpjs.com/ Gulp:工作流程自动化+强化 (一)安装初始化 (二)基础API及插件 ... 
- Kotlin 循环控制
			For 循环 for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下: for (item in collection) print(item) 循环体可以是一个代码块: for ... 
- Redhat中关于httpd仓库安装的简要步骤
			创建repo-server: yum install httpd yum install httpd -y < -y 表示在安装过程中与界面交互时自动答复yes >sys ... 
- nginx  windows版 下载和启动
			nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名.在连 ... 
- OpenStack笔记
			*********virsh xml文件解读****************************** https://libvirt.org/format.html https://libvirt ... 
- URI和URL之间的区别
			URI的全称为统一资源标识符(Uniform Resource Identifier),是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交 ... 
- doctrine/annotation 的简单使用
			<?php // 错误处理机制 register_shutdown_function('myShutDown'); set_error_handler('myError'); set_excep ... 
