求证明算法合理性
查看原帖
求证明算法合理性
251870
LazYQwQ楼主2022/8/29 13:10

用的ST表 感觉while那一段不太对劲

#include<bits/stdc++.h>
using namespace std;
int s[100010],d[100010],f[100010];
int st[100010][22];
int ST(int l,int r) {
	int k=log2(r-l+1);
	if(f[st[l][k]]<=f[st[r-(1<<k)+1][k]])
		return st[l][k];
	else
		return st[r-(1<<k)+1][k];
}
int main() {
	int n,b;
	cin>>n>>b;
	for(int i=1; i<=n; i++) {
		cin>>f[i];
		st[i][0]=i;
	}

	for(int i=1; i<=22; i++) {
		for(int j=1; j+(1<<i)-1<=n; j++) {
			if(f[st[j][i-1]]<=f[st[j+(1<<(i-1))][i-1]])
				st[j][i]=st[j][i-1];
			else
				st[j][i]=st[j+(1<<(i-1))][i-1];
		}
	}
	for(int i=1; i<=b; i++) {
		cin>>s[i]>>d[i];
		int l=1;
		while(l+d[i]<n) {
			if(f[ST(l+1,l+d[i])]<=s[i]) {
				l=ST(l+1,l+d[i]);
			}
            else break;
		}
		if(l+d[i]>=n)cout<<1<<"\n";
		else cout<<0<<"\n";
	}
		return 0;
	}
2022/8/29 13:10
加载中...