题面

题解思路

首先讲公式化简为
sum[r] - 100r > sum[l] - 100l
sum为前缀和。
这一步是很容易想到的,这样就只有一个变量了。
然后就是怎么通过枚举一个i来确定前面的数小于自己且最远的数是什么。
想了很久没想出来,y总这里使用了单调栈上二分来处理,之前没有见到过这种操作。
先使用一个降序的单调栈来保证单调栈上的每个数都是最远的(手模理解)。
如果这个数比栈顶还小,那肯定取不到答案,我们将它入栈。(如果一个数能取到答案,我们肯定不入队,因为在它前面肯定有更小的数)
如果比栈顶大,说明存在答案。
我们直接对单调栈上二分。
单调栈的题还是写太少了。

AC代码

/*从你的全世界路过.*/
#include <bits/stdc++.h>
//#include <unordered_map>
//priority_queue
#define PII pair<int,int>
#define ll long longusing namespace std;const  int  INF =  0x3f3f3f3f;
const  int  N =  1000100;
int a[N] ;
long long sum[N] ;
int  stk[N] ;
int n ;
void solve()
{cin >> n ;for (int i = 1 ; i <= n  ; i++ )cin >> a[i] ; for (int i = 1 ; i <= n ; i++ ){sum[i] = sum[i-1] + a[i] - 100 ; }int top = 0 , res = 0 ; stk[++top] = 0 ; for (int i = 1 ; i <= n ; i++ ){if ( sum[stk[top]] > sum[i] ) stk[++top] = i ; else if ( sum[stk[top]] < sum[i] ) {int t1 = 1 , t2 = top ; while ( t1 < t2 ){int mid = t1 + t2 >> 1 ;if ( sum[stk[mid]] < sum[i] ) t2 = mid ; elset1 = mid + 1 ; }res = max(res,i-stk[t2]) ; }}cout << res << "\n" ;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve() ;return 0 ;
}

AcWing 4487. 最长连续子序列 单调栈上二分 数组模拟栈的好处相关推荐

  1. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

  2. 六、使用数组模拟栈的思路及代码实现

    使用数组模拟栈的实现过程 1.栈的介绍 (1) 栈的英文为(stack) (2) 栈是一个先入后出(FILO-First In Last Out)的有序列表. (3) 栈(stack)是限制线性表中元 ...

  3. 字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器

    文章目录 数组模拟栈类 中缀表达式计算器类(测试类) 数组模拟栈类 主要实现栈的一些基本功能,以及在该场景下的功能. //先创建一个栈 class AStack {private int maxSiz ...

  4. 数据结构之数组模拟栈

    栈的特点即先进后出,采用数组模拟栈,实现栈的这一特性主要是靠定义一个指针(索引). 指针的初始位置指向的是-1 以下给出代码: package com.ebiz.stack;/*** @author ...

  5. 数据结构 - 栈(数组模拟栈操作)

    数组模拟栈操作 package stack;import java.util.Scanner;public class ArrayStackDemo {public static void main( ...

  6. java 模拟栈底层用数组_java用数组模拟栈

    package stack2; public interface StackADT { /** * 添加元素 * @param object */ void push(Object object); ...

  7. 最长连续子序列nlogn算法

    最长上升子序列(LIS)长度的O(nlogn)算法 标签: 算法search优化存储 2012-04-18 19:38 14031人阅读 评论(5) 收藏 举报  分类: 资料学习(15)  解题报告 ...

  8. AcWing 897. 最长公共子序列(LCS朴素版)

    题目连接 https://www.acwing.com/problem/content/899/ 思路 我们定义f[i][j]f[i][j]f[i][j]表示的是a串中长度为i和b串长度为j的最长公共 ...

  9. AcWing 895. 最长上升子序列(LIS朴素做法)

    题目连接 https://www.acwing.com/problem/content/897/ 思路 因为数据范围很小,所以我们定义f[i]f[i]f[i]表示的是以第i个元素结尾的最长上升子序列的 ...

  10. ACwing 895 - 最长上升子序列(最长上升子序列模型)

    给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少. 输入格式 第一行包含整数N. 第二行包含N个整数,表示完整序列. 输出格式 输出一个整数,表示最大长度. 数据范围 1 ≤ N ≤ ...

最新文章

  1. android wear 兼容问题,【悲剧了】仅 1/4 安卓手机兼容 Android Wear - 爱应用
  2. 数据库索引的作用和长处缺点
  3. php 字符串 中文位置,怎样查找中文字符的位置呢
  4. 小朋友嘴里的“金钥匙”,良品小食仙、小鹿蓝蓝们要如何拿到?
  5. session共享怎么做的(分布式如何实现session共享)?
  6. .dat文件写入byte类型数组_《计算机导论》课程实验报告(文件)
  7. MySQL存储过程 游标
  8. Cocos2d BMFont解析
  9. 设计模式笔记之六:生产消费者模式
  10. 【转】基础知识系列2--线性表之链表
  11. 【python】谷歌翻译
  12. 可在手机浏览器下载文件的方法
  13. 电子护照阅读器|机场海关边检酒店必备
  14. Linux每日一讲:awk命令
  15. 秋风荷桂香 晚风拂夕阳
  16. 前端框架ice飞冰与java后台交互分享
  17. Eclipse用户工作台界面简介
  18. re模块,hashlib模块
  19. 2015网易游戏校园招聘笔试题 研发岗
  20. 国开计算机网络 形考4,国开电大计算机网络(本)形考作业四参考答

热门文章

  1. 采用python语言对csv文件写入、最可能采用的字符串方法_2020尔雅无人机原理与构造答案章节答案...
  2. 《计算机入门》模拟卷 b卷,《计算机入门》模拟试卷B.doc
  3. kube-proxy 部署
  4. 一个字等于多少个字节?
  5. 对计算机科学的总体认识,浅谈对计算机科学与技术的认识
  6. android word分页,word文档如何设置分页以及取消分页
  7. python求学生成绩平均值_python 计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁...
  8. 自家主机建云服务器_用云主机还是自己建服务器好
  9. 黑苹果双系统时间不一致_黑苹果系统与windows时间差问题的解决
  10. JS用图片制作的走动的时间表