社区讨论

关于上溢

P2251质量检测参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo8osza3
此快照首次捕获于
2023/10/27 22:06
2 年前
此快照最后确认于
2023/10/27 22:06
2 年前
查看原帖
数组f[MAXN][32]在赋初值的时候上溢但是也AC了,求解
CPP
#include <bits/stdc++.h>

#define MAXN 101010
#define ll long long
#define mod 10000

using namespace std;

int n, m;
int f[MAXN][32], lg[MAXN];
int a[MAXN];

void mylog( ){
    for( int i = 1; i <= MAXN; i++ )
        lg[i] = lg[i / 2] + 1;
    return;
}

void ST( ){
    for( int j = 1; j <= lg[n]; j++ )
        for( int i = 1; i + ( 1 << j ) - 1<= n; i++ )
            f[i][j] = min( f[i][j-1], f[i + ( 1 << ( j - 1 ) )][j-1] );
    return;
}

int check( int l, int r ){
    int k = lg[ r - l + 1 ] - 1;
    return min( f[l][k], f[r - ( 1 << k ) + 1][k] );
}

int main( ){

    mylog( );

    scanf("%d%d",&n,&m);
    
    for( int i = 1; i <= n; i++ )
        for( int j = 1; j <= 32; j++ )
            f[i][j] = MAXN;

    for( int i = 1; i <= n; i++ )
        scanf("%d",&a[i]), f[i][0] = a[i];
    
    ST( );

    for( int i = 1; i <= n - m + 1; i++ )
        printf("%d\n",check( i, i + m - 1 ));

	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...