救、、调好久了 应该是边界问题但是看不出
  • 板块P1816 忠诚
  • 楼主Xiiii
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/7/15 16:56
  • 上次更新2023/10/27 20:10:58
查看原帖
救、、调好久了 应该是边界问题但是看不出
480877
Xiiii楼主2022/7/15 16:56
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int mn[N][20];
int ans[N];
void ST(int x) {
	for(int i=1; i<=x; i++)
		mn[i][0]=a[i];
	for(int j=1; (1<<j)<=x; j++)
		for(int i=1; i<=x; i++)
			if(i+(1<<j)-1<=x)
				mn[i][j]=min(mn[i][j-1],mn[i+(1<<j)-1][j-1]);
}
int main() {
	int m,n,l,r,len,k;
	cin>>m>>n;
	for(int i=1; i<=m; i++) cin>>a[i];
	ST(m);
	for(int i=1; i<=n; i++) {
		cin>>l>>r;
		len=r-l+1;
		k=log2(len);
		ans[i]=min(mn[l][k],mn[r-(1<<k)+1][k]);
	}
	for(int i=1; i<=n; i++) cout<<ans[i]<<" ";

	return 0;
}
2022/7/15 16:56
加载中...