比赛 新年快乐 评测结果 AATTTTTTTA
题目名称 sequence 最终得分 30
用户昵称 zhyn 运行时间 7.860 s
代码语言 C++ 内存使用 5.16 MiB
提交时间 2026-02-13 11:58:38
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define maxn 100005

int t;
int n,q;
int a[maxn],b[maxn],ql[maxn],qr[maxn],pos[maxn];
int c[maxn],d[maxn],e[maxn],f[maxn],g[maxn];
int s,tot=0,sum=0;

void build(){
	int s=sqrt(n)+1;
	tot=n/s;
	if(tot*s<n){
		tot++;
	}
	for(int i=1;i<=n;i++){
		pos[i]=(i-1)/s+1;
	}
	for(int i=1;i<=tot;i++){
		ql[i]=(i-1)*s+1;
		qr[i]=min(n,i*s);
	}
	for(int i=1;i<=n;i++){
		b[i]=a[i];
	}
	for(int i=1;i<=tot;i++){
		sort(b+ql[i],b+1+qr[i]);
	}
	for(int i=1;i<=n;i++){
		g[i]=b[i];
	}
}

void merge(int l,int r,int *rec){
	for(int i=1,j=1,k=l;i<=sum+r-l+1;i++){
		if(j>sum){
			e[i]=b[k++];
		}
		else if(k>r){
			e[i]=rec[j++];
		}
		else{
			if(rec[j]<b[k]){
				e[i]=rec[j++];
			}
			else{
				e[i]=b[k++];
			}
		}
	}
	sum+=r-l+1;
	for(int i=1;i<=sum;i++){
		rec[i]=e[i];
	}
}

void col(int l,int r,int *rec){
	sum=0;
	if(pos[l]==pos[r]){
		for(int i=l;i<=r;i++){
			rec[++sum]=a[i];
		}
		sort(rec+1,rec+1+sum);
	}
	else{
		for(int i=l;i<=qr[pos[l]];i++){
			rec[++sum]=a[i];
		}
		sort(rec+1,rec+1+sum);
		for(int i=pos[l]+1;i<=pos[r]-1;i++){
			merge(ql[i],qr[i],rec);
		}
		for(int i=ql[pos[r]];i<=r;i++){
			b[i]=a[i];
		}
		sort(b+ql[pos[r]],b+1+r);
		merge(ql[pos[r]],r,rec);
		for(int i=ql[pos[r]];i<=r;i++){
			b[i]=g[i];
		}
	}
}

bool query(int lx,int rx,int ly,int ry){
	col(lx,rx,c);
	col(ly,ry,d);
	bool flag=false;
	for(int i=1;i<=sum;i++){
		if(c[i]!=d[i]){
			if(flag){
				return false;	
			}
			flag=true;
		}
	}
	return true;
}


int main(){
	
	freopen("sequence.in","r",stdin);
	freopen("sequence.out","w",stdout);
	
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin>>t;
	while(t--){
		cin>>n>>q;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		build();
		while(q--){
			int lx,ly,rx,ry;
			cin>>lx>>rx>>ly>>ry;
			if(query(lx,rx,ly,ry)){
				cout<<"YES\n";
			}
			else{
				cout<<"NO\n";
			}
		}
	}
	
	
	
	
	
	
	return 0;
}