题意
给定长度为 \(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;
}
标签:cnt,rep,cin,Sol,CF811B,排序
From: https://www.cnblogs.com/JacoAwA/p/CF811B.html