题目
二分答案。那么只用判断这个数是否合法即可。
设这个数为x。个序列中>x记为1,<x记为-1,=x记为0.
最后只用判断q位置上的数是不是0即可.
用线段树处理。区间覆盖。和区间-1,0,1的数字个数。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],refl[N],sum[N<<2],one[N<<2],tag[N<<2],n,m,d;
struct Operate{
int typ,l,r;}q[N];
void pushup(int pos){
sum[pos]=sum[pos<<1]+sum[pos<<1|1];
one[pos]=one[pos<<1]+one[pos<<1|1];
}
int _get(int x,int y){
if(x==y) return 0;
return (x<y)?-1:1;
}
void build(int l,int r,int pos,int K){
tag[pos]=-2;
if(l==r){
sum[pos]=_get(a[l],K),one[pos]=(!sum[pos]);return;}
int mid=(l+r)>>1;
build(l,mid,pos<<1,K),build(mid+1,r,pos<<1|1,K);
pushup(pos);
}