Sol.CF811B

发布时间 2023-09-12 19:15:14作者: JacoAwA

题意

给定长度为 \(n\) 的排列,每次选一段区间 \([l,r]\) 排序,问位置 \(x\) 上的数在排序前后是否发生了改变。保证 \(x\in[l,r]\),共 \(q\) 次询问。

思路

可以暴力枚举区间 \([l,r]\) 内比 \(a_x\) 小的数,每找到一个 \(cnt\) 累加一次,最后根据 \(l+cnt\) 是否等于 \(x\) 输出

代码如下

#include<iostream>
#define rep(a,b,c) for(int a=b;a<=c;a++)
using namespace std;
const int Maxn=1e4+5;
int n,q,l,r,x,a[Maxn],cnt;
int main(){
	cin>>n>>q;
	rep(i,1,n)cin>>a[i]; 
	while(q--){
		cin>>l>>r>>x;
		cnt=0;
		rep(i,l,r)if(a[i]<a[x])cnt++;
		cout<<(l+cnt==x)?"Yes\n":"No\n";
	}
	return 0;
}