blocks题解:

1、题面:

2、分析:

题意大概就是说,找一段最长的区间,并且这段区间的平均值>=k,那么我们可以对他的每一个值减去k,最终求和>=0即可。

那我们需要对每个可能的左端点和右端点进行考虑,并以此让他们进行配对,看他们之间的区间和是否非负。

那么我们先定住一个右端点,再依次考虑可能的左端点即可,那么左端点一开始会很自然的想到是所有小于k的点的右一个点,但是这样可能会T,那么在让我们优化一下,依照从左向右顺序找出所有可能合法的区间,并将出了他的左端点以外的所有点排除(因为这些点还可以向左拓展)但是这太麻烦了,所以我们可以从左向右(以上一个不合法区间的右端点的下一个点作为下一个不合法区间的左端点)找出不合法的区间,那么除了左右端点以外的任一点到左端点这一段区间一定是合法的,因为它没有被纳入进来,然后就找出了所有可能的左端点。那么就往一个单调递减栈里面堆数,注意一开始要在栈里push 0 。

3、代码:

不开long long 见祖宗
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ps push_back
#define mk make_pair
#define fi first
#define se second
typedef pair<ll,ll> pii;
const ll N=1e6+10;
ll n,m,sum[N],k,a[N];
stack<ll> q;
void clear(){
while(q.size())
q.pop();
}
int main(){
cin>>n>>m;
// ll x;
for(ll i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
while(m--){
cin>>k;
clear();
q.push(0);
ll man=0;
for(ll i=1;i<=n;i++)sum[i]=sum[i-1]+a[i]-k;
for(ll i=1;i<=n;i++)if(q.empty()||sum[i]<sum[q.top()])q.push(i);
for(ll i=n;i>=0;i--){
ll jj=-1;
while(!q.empty()&&sum[q.top()]<=sum[i]){
jj=q.top();
q.pop();
}
if(jj!=-1)man=max(man,i-jj);
}
cout<<man<<' ';
} }

blocks 单调栈、单调队列题解的更多相关文章

  1. 单调栈&单调队列学习笔记!

    ummm,,,都是单调系列就都一起学了算了思想应该都差不多呢qwq 其实感觉这俩没有什么可说的鸭QAQ就是维护一个单调的东西,区别在于单调栈是一段进一段出然后单调队列是一段进另一段出?没了 好趴辣重点 ...

  2. [CSP-S模拟测试]:Cover(单调栈++单调队列+DP)

    题目传送门(内部题126) 输入格式 第一行两个个整数$n,m$表示区间的长度与彩灯的数量. 接下来$m$行,每行三个整数$l_i,r_i,a_i$表示一条彩灯能够覆盖的区间以及它的美观程度. 输出格 ...

  3. HZNU-ACM寒假集训Day10小结 单调栈-单调队列

    数据结构往往可以在不改变主算法的前提下题高运行效率,具体做法可能千差万别,但思路却是有规律可循 经典问题:滑动窗口  单调队列O(n) POJ 2823 我开始写的: TLE 说明STL的库还是有点慢 ...

  4. 单调栈&单调队列入门

    单调队列是什么呢?可以直接从问题开始来展开. Poj 2823 给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数. 数列长度:\(N <=10^6 ,m<=N\) 解法① ...

  5. 小结:单调栈 & 单调队列

    概要: 对于维护信息具有单调性的性质或者问题可以转化为具有单调性质的模型的题,我们可以考虑用单调栈或单调队列. 技巧及注意: 技巧很多,只要能将问题转化为单调性问题,就好解决了. 当维护固定长度的单调 ...

  6. 单调栈&单调队列

    最近打了三场比赛疯狂碰到单调栈和单调队列的题目,第一,二两场每场各一个单调栈,第三场就碰到单调队列了.于是乎就查各种博客,找单调栈,单调队列的模板题去做,搞着搞着发现其实这两个其实是一回事,只不过利用 ...

  7. POJ 3250 Bad Hair Day --单调栈(单调队列?)

    维护一个单调栈,保持从大到小的顺序,每次加入一个元素都将其推到尽可能栈底,知道碰到一个比他大的,然后res+=tail,说明这个cow的头可以被前面tail个cow看到.如果中间出现一个超级高的,自然 ...

  8. C++版 - 剑指offer 面试题7:用两个栈实现队列 题解

    用两个栈实现队列 提交网址:  http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=1 ...

  9. ACM数据结构-单调栈、队列

    1.最大数 代码: #include <stdio.h> #include <memory.h> #include <math.h> #include <st ...

  10. 【learning】 单调队列与单调栈用法详解

    1.单调栈 单调栈是指一个栈内部的元素具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈. 其具有以下两个性质: 1,满足栈底到栈顶的元素具有严格单调性. 2,满足栈的先进后出特性,越靠近栈顶的 ...

随机推荐

  1. 【ECharts】02 饼图

    饼状图: <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: 600px;he ...

  2. 某宝上搞来的电子书,经典的量化投资书籍,《Advances in Financial Machine Learning》—— 《金融机器学习的进展》、《量化投资与机器学习》、《金融机器学习研究进展》

    英文书名: <Advances in Financial Machine Learning> 经典的量化投资书籍,某宝上6元搞来的电子版:

  3. 【转载】 一块GPU顶数千个CPU内核,英伟达的这个强化学习利器技术细节终于公开了

    原文地址: https://mp.weixin.qq.com/s/FmFqmIqmknkpBQbNb2ioDA ============================================ ...

  4. NVIDIA显卡原生管理查询功能nvidia-smi的部分使用功能

    本文是使用NVIDIA原生管理工具查询NVIDIA显卡使用情况的一些记录(使用远程管理工具的效率没有使用原生管理接口nvml的效率高,有效率需求者建议使用python版本捆绑的nvml库,具体:htt ...

  5. docker 常用工具

    windows 下常常需要linux环境 直接安装虚拟机不方便也浪费资源 所以直接在docker下安装一个centos 然后搭建好开发环境就是个不错的办法 一.Linux 环境 1.安装centos ...

  6. PKUSC2019 D1T1 题解

    前言 五一网课的例题,但是网上没有详细的题解(其实就是都没放代码),所以来写一篇,就当攒 RP 了.题目可以在这里(不强制在线)或这里(强制在线)提交. 题目简述 有 \(n\)(\(n \leq 5 ...

  7. 【运维技巧】海豚调度工作流实例卡在正在停止&任务实例卡在正在运行怎么办?

    在大数据调度系统中,,大家可能会碰到任务实例状态更新不及时的情况. 对于Apache DolphinScheduler用户来说,这可能意味着前端显示的任务状态与实际情况不一致,即使任务已经在后台停止运 ...

  8. milvus 结果

    milvus (2.3.3) 两个查询方法 collection.query(...) 和 collection.search(...) 的返回类型是不同的,用错了会说 attribute error ...

  9. 【粉丝问答20】Linux内核定时器使用及其他时间操作

    问题描述 如何使用内核定时器? 内核定时器 Linux内核定时器是timer_list,下面我们详细介绍定时器的使用. 1. 简介 内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执 ...

  10. Lucas-Washburn + Cassie-Baxter

    如果粉末间隙内壁的表面能随着润湿而降低,则液体会向管内上升渗入(\(\gamma_{\text{SL}}<\gamma_{\text{SO}}\)). 考虑液体上升的驱动力来自于附加压力,则由弯 ...