Non-negative Partial Sums 单调队列

Mac用户必看:PD虚拟机网络初始化失败的3分钟修复指南(附详细截图) 本文针对Mac用户在Parallels Desktop(PD虚拟机)启动时遇到的“网络初始化失败”问题,提供了快速诊断与修复指南。核心原因是macOS系统更新后权限未正确授予。文章通过详细的三步修复法(关闭进程、修改配置文件、重新授权重启),帮助用户在3分钟内恢复虚拟机网络连接,并附有排查清单与预防建议。 阅读详情

Non-negative Partial Sums


初学单调队列,纠结了好久这个题,一直没理解原理是怎么回事,网上搜解题报告一股脑看下去还是没看个明白、、、、、终于慢慢摸索出来了

首先理解这个题的意思:一个数列,可以将最前一个数放在最后,也就是这是个数列是环状的,比说1,-2,3这个数列可以写成-2,3,1,和3,1,-2两种循环方式

题目要求统计这个数列所有循环中每一个都满足前i(1<= i <=n)个数之和为非负数(>=0)的i的个数。

思路:从1到n枚举i,求出每一个循环状态前i个数之和min,若min<0则 i 不满足条件,否则ans累加计数。然后问题就是如果依次枚举循环求和肯定超时,如何优化?

大神有用线段树有用其他各种巧办法、、、这里写下单调队列希望比那些单调队列报告更好理解。

先借个图:http://www.2cto.com/kf/201311/255850.html


循环的状况一般都把数列再往后复制一遍(图中黄色)


sum[ i ]=a[1]+a[2]+...+a[i];

思路不变。图中红色方框从2向右就开始移动,每次都对应一个循环状态,单调队列维护红框中的sum[ ](递增),这是取单调队列q的第一个值q[ 0 ](红框中sum[ ]的最小值),

用sum[ q[0] ] 去减红框左边外面第一个数也就是sum[ 1 ],即sum[ q[0] ]-sum[ 1 ]=t,若 t >=0 说明所有循环状态中的前 1 个数的和都>=0,则ans可以计数。为什么呢。。。

想一下,若红框中有A[ i ] < 0 那么sum[ i ]相对sum[ i-1 ]必定是减少的,相对方框左边外面第一个sum[ ]肯定也是减少的,这样的一个差必为负,而为什么要取红框左外第一个数,因为我们红框右移同时左边外面的数列递增到k个,我们可以通过取红框内最小值去减这个数一次性判断前k个数之和是否>=0

当红框再向右移时,有  sum[ q[ 0 ] ] - sum[ 2 ] = t,同理,t >= 0说明所有循环状态中前2个数的和都 >=0,否则存在负数

q始终维护红框内的最小sum[ ],每次移动判断 sum[ q[ 0 ] ] - sum[ i - n ]的值正负状况(i为红框内最右一个数的下标)


#include<stdio.h>
#include<string.h>
#define MAXN 1000005
int q[MAXN*2];//单调队列
int sum[MAXN*2];
int main()
{
    int n,i;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&sum[i]);
            sum[i+n]=sum[i];
        }
        for(i=1;i<=(n<<1);i++)
            sum[i]+=sum[i-1];
        int head=0,rear=0;
        int ans=0;
        for(i=2;i<=(n<<1);i++)
        {
            while(head<rear && sum[q[rear-1]]>=sum[i])
                --rear;
            q[rear++]=i;
            if(i>n&&sum[q[head]]-sum[i-n]>=0)
                ++ans;
            while(q[rear-1]-q[head]+1>n)
                ++head;
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

从零到一:QT for OpenHarmony 开发环境实战搭建与踩坑指南 本文是一份详尽的QT for OpenHarmony开发环境搭建实战指南。文章手把手教你如何在Windows和macOS系统上,从环境准备、核心工具(DevEco Studio与社区版QT SDK)安装配置,到创建首个QT Quick项目、解决构建部署中的常见问题,最终实现应用在OpenHarmony设备上运行。内容涵盖关键配置修改、资源管理及深度踩坑经验,旨在帮助开发者高效开启跨平台开发之旅。 阅读详情

相关推荐

华为IPD实战:从概念到发布的完整流程拆解(附各阶段关键文档模板)

本文深入拆解华为IPD(集成产品开发)从概念到发布的完整实战流程,涵盖概念、计划、开发验证及发布生命周期四大阶段。详细解析了各阶段的核心活动、关键产出与决策评审点,并提供了如《初始业务计划书》等关键文档模板框架,旨在帮助企业将IPD理论转化为可执行的操作指南,提升研发效率与产品成功率。

weixin_29212429的博客 525

HDU 4193 Non-negative Partial Sums(单调队列)

题目链接:Click here~~ 上次比赛的一道题,可以用单调队列做。 题意: 给你一个n项的序列,每次可以把序列的首项移动到末尾,显然一共可以构成 n 种序列,问一共有多少种序列满足条件:序列的前 i 项和都大于等于0(i:1~n)。 解题思路: 开一个 2*n 的数组,后面 n 项复制前面 n 项。这样,每个长度为 n 的区间都代表一种序列(这也是循环序列的一般做法吧)。 然...

爱.NET 204

量子磁场测量技术在生物磁场成像领域的应用现状与产业趋势

首先对量子磁场测量技术的发展进行了简述,然后介绍了量子磁场测量技术在生物磁场成像领域的应用,最后分析了量子磁场测量技术的两大重要应用方向(心磁图仪和脑磁图仪)及其产业现状和未来发展趋势。美国普林斯顿大学在《自然》上公布了目前人类磁场测量灵敏度最高的基于量子磁场测量技术的零场原子磁力计。拥有巨大的发展潜力及庞大的市场空间。因此其数千万元的高昂售价及每年数百万元的超导维护成本限制了超导式心磁图仪的发展和临床应用。而基于超导式脑磁图仪的癫痫、阿尔兹海默症、抑郁症等脑疾病患者的临床研究也取得丰富的研究成果。

罗伯特技术屋 1528

hdu 4193 Non-negative Partial Sums (单调队列)

Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1357    Accepted Submission(s): 518 Problem Description You are giv...

pxlsdz的博客 452

实战指南:在华为防火墙上构建基于自签CA的SSL证书挑战式认证体系

本文详细介绍了在华为防火墙上构建基于自签CA的SSL证书挑战式认证体系的实战指南。通过自签CA证书生成、华为防火墙SSL VPN配置、客户端安装与测试等步骤,帮助企业实现更安全的远程办公接入方案,有效防范密码泄露风险。文章重点讲解了证书挑战登录的实现原理和配置细节,适用于企业网络安全建设。

weixin_32428571的博客 256

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图。

qq_36287830的博客 3101

Non-negative Partial Sums

这个题我自己还没搞定,看了好久,最后没核心部分还真是清楚,知道的麻烦留言一下下,或者加我 qq:997930294给我解释一下,万分感谢 描述     You are given a sequence of n numbers a0,....,an-1. A cyclic shift by k positions (0≤k≤n-1) results in the follo

吃葡萄不吐葡萄皮 1465

29、几何形态测量学在蝴蝶翅膀研究中的应用

本博客介绍了几何形态测量学在花斑木蛱蝶(Pararge aegeria)翅膀研究中的应用,探讨了环境因素对蝴蝶翅膀大小和形状的影响。通过选择合适的地标并采用Procrustes分析方法,研究揭示了不同景观类型下翅膀形状的差异及其潜在的适应性意义。文章还讨论了发育可塑性在飞行形态变异中的作用,并比较了几何形态测量学与其他传统方法的优势。最后提出了未来研究方向,包括多因素综合分析、发育机制探索及长期生态监测,为理解蝴蝶的适应性进化提供了重要线索。

ff678的博客 107

HDU Non-negative Partial Sums (单调队列)

Problem Description You are given a sequence of n numbers a0,..., an-1. A cyclic shift by k positions (0k ak+1,..., an-1, a0, a1,..., ak-1. How many of the n cyclic shifts satisfy the condition tha

左眼皮跳跳 813

脑机接口中的视觉信号解码:原理、技术与应用

脑机接口中的视觉信号解码:原理、技术与应用​ ,人工智能,计算机视觉,大模型,AI,脑机接口(Brain - Computer Interface,BCI)作为一种革命性的技术,致力于搭建人脑与外部设备之间的直接通信桥梁,绕开传统的神经肌肉输出通路。其核心目标是解读大脑活动产生的信号,从而实现对外部设备的精准控制或信息交互。在众多脑机接口研究方向中,视觉信号解码因其独特的优势和广泛的应用前景,吸引了大量科研人员的关注。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

32位快速加法器设计

32位快速加法器设计

好好学习,天天向上 3289

Non-negative Partial Sums(单调队列,好题)

Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2252    Accepted Submission(s): 773 Problem Description You

xdlove 1205

Arcgis中的高级模型构建器技术之图层按某一字段批量转KMZ

本文介绍在ArcGIS模型构建器中创建按属性批量转换KMZ的工具。通过迭代要素选择工具按字段属性分类,结合应用图层符号设置和图层转KML工具,实现将单个图层按指定属性(如规划地类)自动分批次转换为带符号的KMZ文件。关键步骤包括:1)设置迭代要素选择参数;2)应用预设符号系统;3)配置KMZ输出路径和命名规则。该工具可高效处理规划图斑等数据,保持分类符号化效果,输出结果为按属性值命名的多个KMZ文件。

weixin_44671081的博客 470

单调队列—— HDU 4193 Non-negative Partial Sums

Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1357    Accepted Submission(s): 518 Problem Description Y

Vector 1871

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

HDU 4193 Non-negative Partial Sums【单调队列】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题意: 给定序列,可以把后面的连续的部分移到最前面来,问多少种移法使得最终得到的序列的前i项和均大于等于0(1≤i≤n)? 分析: 先将数组前后拼接起来,记录每个位置的前缀和。然后去找长度为n的滑动窗口,在这个窗口内,要保证前i项和大于等于0,也即区...

An55511的博客 310

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDU 4193 Non-negative Partial Sums 【单调队列】

HDU 4193 Non-negative 题解,用到了单调队列、前缀和、循环同构等技巧

Help me up!I can still AC! 500

HDOJ-4193-Non-negative Partial Sums【单调队列】

HDOJ-4193-Non-negative Partial Sums【单调队列】

Linoy 516

HDU 4193 Non-negative Partial Sums(想法题,单调队列)

HDU 4193 题意:给n个数字组成的序列(n 思路: 这题看到数据规模觉得只能用最多O(nlogn)的算法,然后想到了之前刚做过的有关最小表示法的题,但还没证明出一个做这题有效的算法出来。 后来看过题解,发现用的最多的方法是单调队列,然而我对这个知识点知之甚少orz /*科普君:from单调队列 单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只

a novice 910

hdu 4193 Non-negative Partial Sums 单调队列

先复制一遍数组,在用一个数组sum[ i ]表示前 i 个数字的和,对于以第k个数开头的情况,只需找出sum[ k ]到sum[ k+n ]的最小值min,如果min - sum[ k-1 ]大于0则满足。 #include <stdio.h> #define maxn 2001000 int a[maxn],sum[maxn]; int q[2*maxn]; in...

amily05200的博客 131

hdu Non-negative Partial Sums(单调队列)

Non-negative Partial Sums Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 6   Accepted Submission(s) : 1 Font: Times New Roman | Verdana

勿忘初衷 1727

HDU-4193 Non-negative Partial Sums 单调队列

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4193         题意:给定一个数列,进行绕环移动,然后问所有前缀和都大于等于零的数列有多少。         首先按照一般方法,把数列往后复制,即a1a2,,,ana1a2,,,an,然后对其求前缀和。接下来就要求移动的区间内的最小值(这里很像POJ2823),看其是否大于等于零。那么就可用到单

岁月流风、、 1001

【单调队列】hdu 4193 Non-negative Partial Sums

http://acm.hdu.edu.cn/showproblem.php?pid=4193 题意:每次把最后一个元素移动到队首,求这n个数的所有前缀数组的和都>=0 分析:这货就是一个循环数组,用单调队列找出n个前缀的最小的和,只要判断这个最小的和是否>=0即可 #include #include using namespace std; const int NM=20000

yduqytd的专栏 817

HDU OJ 4193 Non-negative Partial Sums 【单调队列】

原题连接:http://acm.hdu.edu.cn/showproblem.php?pid=4193 单调队列详解:参考    http://blog.csdn.net/dgq8211/article/details/7430726   ,讲的很好。 AC代码: #include #include const int M=1000002<<1; int sum[M],q[M]; int h

nyist_飘谊 2167
上一篇: Luck and Love (二维线段树)
下一篇: hdu 2222 Keywords Search (AC自动机)
yjCola
博客等级 码龄14年 4粉丝 138原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值