社区讨论

求调刚才CF的D。

学术版参与者 6已保存回复 16

讨论操作

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

当前回复
16 条
当前快照
1 份
快照标识符
@lo8i42sg
此快照首次捕获于
2023/10/27 18:59
2 年前
此快照最后确认于
2023/10/27 18:59
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
#define maxn 200005
using namespace std;
int t,n,m,q,a[maxn],f[maxn],g[maxn],minn[maxn*4];
void pushup(int now)
{
	minn[now]=min(minn[now*2],minn[now*2+1]);
	return;
}
void build(int now,int l,int r)
{
	if(l==r)
	{
		minn[now]=a[l];
		return;
	}
	int mid=l+r>>1;
	build(now*2,l,mid);
	build(now*2+1,mid+1,r);
	pushup(now);
	return;
}
int query(int now,int l,int r,int ql,int qr)
{
	if(r<ql||l>qr) return 1e18;
	if(l>=ql&&r<=qr) return minn[now];
	int res=1e18,mid=l+r>>1;
	if(ql<=mid) res=min(res,query(now*2,l,mid,ql,qr));
	if(qr>mid) res=min(res,query(now*2+1,mid+1,r,ql,qr));
	return res;
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>a[i];
		a[i]=n-a[i]+1;
	}
	build(1,1,m);
	cin>>q;
	while(q--)
	{
		int x,y,xx,yy,k;
		cin>>x>>y>>xx>>yy>>k;
		if(y>yy) swap(y,yy);
		if((abs(xx-x)%k!=0)||((yy-y)%k!=0))
		{
			cout<<"NO"<<endl;
			continue;
		}
		else if((abs(xx-x)%k==0)&&yy-y<=1)
		{
			cout<<"YES"<<endl;
			continue;
		}
		else
		{
			int maxx=query(1,1,m,y+1,yy-1)-1;
			if(x%k==0) x=k;
			else x=x%k;
			if(x<=maxx)
			{
				cout<<"YES"<<endl;
			}
			else cout<<"NO"<<endl;
		}
	}
	return 0;
}

回复

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

正在加载回复...