ST为什么不过o(╥﹏╥)o
  • 板块P2251 质量检测
  • 楼主MuQYun
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/14 20:41
  • 上次更新2024/1/15 09:56:05
查看原帖
ST为什么不过o(╥﹏╥)o
1079913
MuQYun楼主2024/1/14 20:41
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string.h>
using namespace std;
const int N = 1000005;
const int inf = 0x7f;
int p[N];
int n, m;
int LOG2[N];
int dp_min[N][25];
void init(){
    LOG2[0] = -1;
    for (int i = 1; i <= N; i++){
        LOG2[i] = LOG2[i >> 1] + 1;
    }
    for (int k = 1; k <= N; k++){
        dp_min[k][0] = p[k];
    }
    int MAX_index = log2(n);
    for (int i = 1; i <= MAX_index; i++){
        for (int j = 1; j + (1 << i) <= n + 1; j++){
            dp_min[j][i] = min(dp_min[j][i - 1], dp_min[j + (1 << (i - 1))][i - 1]);
        }
    }
}
int getans(int L,int R){
    int len = R - L + 1;
    int k = LOG2[len];
    int ans;
    ans = min(dp_min[L][k], dp_min[R - (1 << k) + 1][k]);
    return ans;
}
int main(){
    scanf("%d%d", &n, &m);
    memset(dp_min, inf, sizeof(dp_min));
    for (int i = 1; i <= n; i++){
        scanf("%d", &p[i]);
    }
    init();
    for (int i = 1; i <= n - m + 1; i++)
        printf("%d\n", getans(i, i + m - 1));
    return 0;
}
2024/1/14 20:41
加载中...