时超求助
查看原帖
时超求助
401665
54fwk楼主2022/1/16 20:01
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+1;
struct node{
	long long m,v;
}a[N];
long long f[N],s,d;
long long n,b;
bool cmp(node a,node b) {
	return a.v<b.v;
}
bool cmp2(node a,node b) {
	return a.m<b.m;
}
int check(long long end,long long h) {
	for(long long i=1; i<end; i++) {
		if(a[i+1].m-a[i].m>h)
			return 0;
	}
	return 1;
}
int main() {
	scanf("%lld%lld",&n,&b);
	long long maxf=0;
	for(long long i=1; i<=n; i++) {
		scanf("%lld",&f[i]);
		a[i].m=i;
		a[i].v=f[i];
		maxf=max(maxf,f[i]);
	}
	sort(a+1,a+n+1,cmp);
	for(long long i=1; i<=b; i++) {
		scanf("%lld%lld",&s,&d);
		long long l=1,r=n,k;
		if(s>maxf) {
			cout<<1<<endl;
			continue;
		} 
		while(l<r) {
			long long mid=l+r>>1;
			if((a[mid].v==s)||(a[mid].v<s&&a[mid+1].v>s)) {
				k=mid;
				break;
			}else if(a[mid].v>s) {
				r=mid;
			}else if(a[mid].v<s) {
				l=mid;
			}
		}
		sort(a+1,a+k+1,cmp2);
		cout<<check(k,d)<<endl;
	}
	return 0;
}
2022/1/16 20:01
加载中...