poj 2823 Sliding Window(单调队列)

来源:互联网 发布:nodejs 返回json对象 编辑:程序博客网 时间:2024/05/06 10:18

用C++5293msA掉了,用G++就超时。

今天机房蚊子怎么这么多,咬死我了。

#include<stdio.h>#include<string.h>#define N 1000005int a[N],Mi[N],Ma[N];int ans1[N],ans2[N];int main(){    int n,t;    while(scanf("%d%d",&n,&t)!=EOF)    {        int i,j;        for(i=1;i<=n;i++)            scanf("%d",&a[i]);        int mihead,mitail,mahead,matail;        mihead=mitail=mahead=matail=0;        for(i=1;i<=t;i++)        {            while(mihead<mitail&&a[i]<a[Mi[mitail-1]])                mitail--;            Mi[mitail++]=i;            while(mahead<matail&&a[i]>a[Ma[matail-1]])                matail--;            Ma[matail++]=i;        }        j=1;ans1[j]=a[Mi[mihead]];ans2[j]=a[Ma[mahead]];j++;        for(i=t+1;i<=n;i++)        {              if(i-t==Mi[mihead]&&mihead!=mitail)                mihead++;            if(i-t==Ma[mahead]&&mahead!=matail)                mahead++;            while(mihead<mitail&&a[i]<a[Mi[mitail-1]])                mitail--;            Mi[mitail++]=i;            while(mahead<matail&&a[i]>a[Ma[matail-1]])                matail--;            Ma[matail++]=i;ans1[j]=a[Mi[mihead]];ans2[j]=a[Ma[mahead]];j++;        }        for(i=1;i<j-1;i++)            printf("%d ",ans1[i]);        printf("%d\n",ans1[i]);        for(i=1;i<j-1;i++)            printf("%d ",ans2[i]);        printf("%d\n",ans2[i]);    }    return 0;}


原创粉丝点击