zoukankan      html  css  js  c++  java
  • 1126. Magnetic Storms(单调队列)

    1126

    最简单的单调队列应用吧

    单调队列是指在一个队列中各个元素单调 递增(或者递减),并且各个元素的下标单调 递增。

    单调队列的大体操作

    进队时,将进队的元素为e,从队尾往前扫描,直到找到一个不大于e的元素d,将e放在d之后,舍弃e之后的所有元素;如果没有找到这样一个d,则将e放在队头(此时队列里只有这一个元素)。
    出队时,将出队的元素为e,从队头向后扫描,直到找到一个元素f比e后进队,舍弃f之前所有的。(实际操作中,由于是按序逐个出队,所以每次只需要出队只需要比较队头)。
    每个元素最多进队一次,出队一次,摊排分析下来仍然是 O(1)。
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<queue>
     7 using namespace std;
     8 #define N 25020
     9 int p[N],q[N];
    10 int main()
    11 {
    12     int i=0,j,k,m,maxz=0;
    13     scanf("%d",&m);
    14     while(scanf("%d",&k)!=EOF)
    15     {
    16         if(k==-1) break;
    17         i++;
    18         p[i]  = k;
    19         maxz = max(maxz,k);
    20     }
    21     if(m>=i)
    22     {
    23         printf("%d
    ",maxz);
    24         return 0;
    25     }
    26     int str=1,end=1;
    27     for(j = 1; j <= i ; j++)
    28     {
    29         while(end>=str&&p[j]>=p[q[end]])
    30         end--;
    31         end++;
    32         q[end] = j;
    33         while(q[str]<=j-m)
    34         str++;
    35         if(j>=m)
    36         printf("%d
    ",p[q[str]]);
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    Android开源项目分类汇总
    android开发之Tabhost刷新
    android开发之图表
    通过易宝实现网上支付
    HTTP协议
    汽车美容管理系统质量属性
    框架选择的原因及其说明
    浅析软件架构
    《需求分析与系统设计》读书笔记3
    《需求分析与系统设计》读书笔记2
  • 原文地址:https://www.cnblogs.com/shangyu/p/3332293.html
Copyright © 2011-2022 走看看