zoukankan      html  css  js  c++  java
  • ZJNU 1365

    每次都寻找长度为k的区间内的最小值显然很容易超出时间限制

    所以可以把窗户看作一个数量固定的队列

    每次观察入列与出列的元素对答案贡献如何,以更新答案

    #include<stdio.h>
    int tmp[1000010],max[1000010];
    int gmax(int i,int k)
    {
        int j,m=tmp[i];
        for(j=i-1;j>i-k;j--)
            if(m<tmp[j])
                m=tmp[j];
        return m;
    }
    int gmin(int i,int k)
    {
        int j,m=tmp[i];
        for(j=i-1;j>i-k;j--)
            if(m>tmp[j])
                m=tmp[j];
        return m;
    }
    int main()
    {
        int n,k,i,lmin,lmax;
        scanf("%d%d",&n,&k);
        for(i=0;i<k;i++)
            scanf("%d",&tmp[i]);
        lmin=gmin(k-1,k);
        lmax=gmax(k-1,k);
        printf("%d",lmin);
        max[0]=lmax;
        for(;i<n;i++)
        {
            scanf("%d",&tmp[i]);
            if(tmp[i-k]==lmin)//如果即将移出的数字与前一位置的答案相同,说明答案需要重新查找
                lmin=gmin(i,k);
            else if(tmp[i]<lmin)//如果即将移入的数字比前面的答案小,更新答案为当前位置输入的答案
                lmin=tmp[i];
            printf(" %d",lmin);
            if(tmp[i-k]==lmax)
                lmax=gmax(i,k);
            else if(tmp[i]>lmax)
                lmax=tmp[i];
            max[i+1-k]=lmax;
        }
        printf("
    %d",max[0]);
        for(i=1;i<n-k+1;i++)
            printf(" %d",max[i]);
        
        return 0;
    }
  • 相关阅读:
    垃圾回收机制,正则模块
    日常模块
    文件路径带有字符串的处理方法
    QT进制之间的相互转换
    4-7 selectors模块
    4-5 异步IO模型
    4-4 多路复用IO模型
    4-3 非阻塞IO
    4-2 阻塞IO
    4-1 IO模型介绍
  • 原文地址:https://www.cnblogs.com/stelayuri/p/12234995.html
Copyright © 2011-2022 走看看