为什么会wa第二点呢?

P1886 滑动窗口 /【模板】单调队列

Alear @ 2019-02-11 21:55:26

#include<bits/stdc++.h>
using namespace std;
int st[1000010][15],st2[1000010][15],n,k,p[20];

int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        scanf("%d",&st[i][0]);
        st2[i][0]=st[i][0];
    }
    p[0]=1;
    for(int i=1;i<20;i++){
        p[i]=p[i-1]*2;
    }
    int max_log=log(n)/log(2);
    for(int j=1;j<=max_log;j++)
        for(int i=1;i<=n-p[j]+1;i++)
            st[i][j]=max(st[i][j-1],st[i+p[j-1]][j-1]);
    for(int j=1;j<=max_log;j++)
        for(int i=1;i<=n-p[j]+1;i++)
            st2[i][j]=min(st2[i][j-1],st2[i+p[j-1]][j-1]);
    int t=log(k)/log(2);
    for(int i=1;i<=n-k+1;i++){
        printf("%d ",min(st2[i][t],st2[i+k-p[t]][t]));
    }
    putchar('\n');
    for(int i=1;i<=n-k+1;i++){
        printf("%d ",max(st[i][t],st[i+k-p[t]][t]));
    }
    putchar('\n');

}

by Alear @ 2019-02-13 20:46:49

程序也有经过大量随机数据对拍了,可是就是不能过第二个点


|