首页 > 其他分享 >7935: 最大值问题 单调队列

7935: 最大值问题 单调队列

时间:2023-05-17 17:00:33浏览次数:40  
标签:7935 gcd 队列 最大值 long int yuyu

描述

 

给定n个正整数,crq先选了第1~k个数,要求yuyu求出最大值,yuyu轻松完成,crq直接甩出一堆,要求第2~k+1个,3~k+2个, ..., n-k+1~n个,全部都求出来,之后便轻松休息了。

 

 

输入

 

第一行两个整数 n和k(1≤k≤n≤106)。

第二行 n个整数,表示编号1~n方格中的数字ai(1≤ai≤3×107)。

 

 

输出

 

按顺序求出各个最大值,每行输出一个。

 

 

样例输入

 

5 3
1 2 3 4 5

样例输出

 

3
4
5

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+10,inf = 0x3f3f3f3f;
int gcd(int a,int b){return a==0?b:gcd(b%a,a);}
int a[N],q[N];
int n,k;
void getmax()
{
    int head = 0,tail = 0;
    for(int i=1;i<k;i++)
    {
        while(head<=tail && a[q[tail]]<=a[i])tail--;
        q[++tail] = i;
    }
    for(int i=k;i<=n;i++)
    {
        while(head<=tail && a[q[tail]]<=a[i])tail--;
        q[++tail] = i;
        while(q[head]<=i-k)head++;
        printf("%d\n",a[q[head]]); 
    }
    
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    getmax();
     return 0;
}

 

标签:7935,gcd,队列,最大值,long,int,yuyu
From: https://www.cnblogs.com/jyssh/p/17409310.html

相关文章

  • 通过数组查询最大值
    #include<iostream>intmain(){floatarr[10];inti;floatmax;intmaxindex;for(i=0;i<=9;i++){scanf_s("%f/n",&arr[i]);}max=arr[0];for(i=1;i,10;i++){if(max<ar......
  • js 查找数组中倒数第二最大值
    constarr=[1,5,3,7,9,21,33,18,12,44,43,22,55,66,65]constresult=arr=>{//存储最小值letminMax=0//存储最大值letmax=0arr.forEach(item=>{if(item>max){if(minMax<max){minMax=max......
  • 求三个数的最大值
    题目描述:编写程序,要求用户从键盘输入三个整数,输出其中的最大数。输入格式:输入三个整数,以逗号分隔。输出格式:输出三个数的最大值。样例输入:3,4,5样例输出:345maxnumberis:5提示:算法提示:将第一个数作为最大数先赋值给max_value,然后将max_value逐一与另外两......
  • 使用优先队列寻找中位数
    Next,SupposewewouldliketoinventanewADTcalledMedianFinderwhichisacollectionofintegersandsupportsfindingthemedianofthecollection.MedianFinderadd(x);//addsxtothecollectionofnumbersmedian();//returnsthemedianfromacol......
  • LinkedList作为队列的常用方法
    queue接口中的方法Deque接口中的方法......
  • 力扣---1072. 按列翻转得到最大值等行数
    给定 mxn 矩阵 matrix 。你可以从中选出任意数量的列并翻转其上的 每个 单元格。(即翻转后,单元格的值从0变成1,或者从1变为0。)返回经过一些翻转后,行与行之间所有值都相等的最大行数 。 示例1:输入:matrix=[[0,1],[1,1]]输出:1解释:不进行翻转,有1行所有值都......
  • 按列翻转得到最大值等行数
    给定mxn矩阵matrix。你可以从中选出任意数量的列并翻转其上的每个单元格。(即翻转后,单元格的值从0变成1,或者从1变为0。)返回经过一些翻转后,行与行之间所有值都相等的最大行数。示例1:输入:matrix=[[0,1],[1,1]]输出:1解释:不进行翻转,有1行所有值都相等。......
  • LeetCode 239. 滑动窗口最大值
    题目链接:LeetCode239.滑动窗口最大值题意:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。解题思路:(单调队列)O(n)使用单调队列求解......
  • C语言之环形队列
    一、环形队列的优势环形队列是一种特殊的队列,它可以解决普通队列在使用时空间利用不充分的问题。在环形队列中,当队列满时,队列的尾指针指向队列的起始位置,而不是指向队列的最后一个元素。这样可以在不浪费空间的情况下存储更多的元素。下面我们来详细讲解一下环形队列的......
  • 单调队列算法模板及应用
    文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes】或者【AIShareLab】回复算法笔记也可获取。队列算法模板//hh表示队头,tt表示队尾intq[N],hh=0,tt=-1;//向队尾插入一个数q[++tt]=x;//从队头弹出一个数hh++;//队头......