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. 【设计模式 Design Pattern】【UML】建模语言

    什么是UML图? UML-Unified Modeling Language 统一建模语言,又称标准建模语言. 是用来对软件密集系统进行可视化建模的一种语言. UML的定义包括UML语义和UML表示法 ...

  2. 【Mybatis】12 复杂关联查询

    一对多 & 多对一 关联查询 数据库准备: 一个班级表,字段:班级ID + 班级名称 一个学生表,字段:学生ID + 学生姓名 + 所属的班级ID # 班级表 班级ID+班级名称 CREATE ...

  3. 国内的开源AI模型共享网站(AI模型的GitHub)—— mindscope —— 使用git lfs方式下载模型文件

    参考前文: 国内的开源AI模型共享网站(AI模型的GitHub)-- mindscope -- 对标外网的"huggingface",mindscope好用吗? 使用git lfs ...

  4. 元学习:元学习的始祖论文——《On the Optimization of a Synaptic Learning Rule》

    ============================================= 这个论文保持着上世纪人工智能论文的特点,与其说是计算机类论文更不如说是偏生物科学方面的论文,这也可能是因为当 ...

  5. 【解决】ValueError: Memory growth cannot differ between GPU devices

    在ubuntu系统下双显卡运行TensorFlow代码报错: ValueError: Memory growth cannot differ between GPU devices 报错的代码位置为: ...

  6. 关于vue按需引入ElMessage和ElMessageBox未被自动引入到auto-important的问题

    相信关于按需引入大家应该都会了,不论是官网还是百度一大堆教程 我这边也是参照https://github.com/youlaitech/vue3-element-admin的写法去写的-----需要的 ...

  7. LemurBrowser狐猴浏览器:支持插件扩展、内置免费AI工具的移动端浏览器

    如何选择一款合适的浏览器? 在这个数字化时代,浏览器作为互联网的入口.然而,选择一款合适的浏览器却并不容易. 注释:狐猴浏览器是浏览器新标签页插件Wetab提供的支持在移动端安装插件,内置免费AI工具 ...

  8. 网卡DM9000裸机驱动详解

    一.网卡 1. 概念 网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件.由于其拥有MAC地址,因此属于OSI模型的第2层.它使得用户可以通过电缆或无线相互连接. 每一个网卡都有一个被称 ...

  9. SpringBoot 用的 spring-jcl 打印日志,与 LoggingSystem 有鸡毛关系?

    开心一刻 现实中,我有一个异性游戏好友,昨天我心情不好,找她聊天 我:我们两个都好久没有坐下来好好聊天了 她:你不是有女朋友吗 我:人家不需要我这种穷人啊 她:难道我需要吗 前情回顾 从源码分析 Sp ...

  10. Java并非锁之独占非公平锁理解

    Java锁系列教程之独占式锁 在Java并发编程中,锁是一个很重要的对象.Java中锁有两种:隐式锁和显式锁.使用synchronized关键字的锁是隐式锁.因为锁的申请和释放都是由JVM来维护的,不 ...