• 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;
    }
  • 相关阅读:
    <JZOJ5912>VanUSee
    <JZOJ5910>duliu
    <JZOJ5913>林下风气
    pytest学习笔记(二)
    试用saucelabs进行浏览器兼容性测试
    pytest学习笔记(一)
    SSM框架搭建,以及mybatis学习
    游戏2048的python实现
    使用svn在github上下载文件夹
    jenkins集成python的单元测试
  • 原文地址:https://www.cnblogs.com/stelayuri/p/12234995.html
Copyright © 2020-2023  润新知