ST表解法求助,80分,2与10 RE
查看原帖
ST表解法求助,80分,2与10 RE
974512
luokes楼主2023/3/25 15:18

代码如下

#include <bits/stdc++.h>

#define NMAX 1000000
using namespace std;


int n,m;
int st[NMAX+1][32];

int calc(int l,int r)
{
	int m = log2(r-l+1);
	return min(st[l][m],st[r-(1<<m)+1][m]);
}

int main()
{
	cin >> n >> m;
	// [1] 获取数据,并进行预处理
	for(int i = 1;i <= n;i++)
	{
		cin >> st[i][0];
	}
	for(int j = 1;(1<<j)-2 <= n;j++)
	{
		for(int i = 1;i+(1<<j)-1 <= n;i++)
		{
			st[i][j] = min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
		}
	}
	// [2] 查询
	cout << 0 << endl;
	for(int i = 2;i <= n;i++)
	{
		if(i <= m) printf("%d\n",calc(1,i-1));
		else printf("%d\n",calc(i-m,i-1));
	}
	return 0;
}      
2023/3/25 15:18
加载中...