Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <cstdio>
- #define ll long long
- #define pll pair<ll,ll>
- #define F first
- #define S second
- using namespace std;
- const ll MAXN=1e5+5;
- const ll INF=1e18;
- ll n,q,a[MAXN];
- pll seg[MAXN*4];
- string s;
- void build(ll idx, ll l,ll r) {
- if(l==r) {
- seg[idx].F=a[l];
- seg[idx].S=a[l];
- }
- else {
- ll m=(l+r)/2;
- build(idx*2,l,m);
- build(idx*2+1,m+1,r);
- seg[idx].F=min(seg[idx*2].F,seg[idx*2+1].F);
- seg[idx].S=max(seg[idx*2].S,seg[idx*2+1].S);
- }
- }
- ll querymn(ll idx,ll ql,ll qr,ll l,ll r){
- if(l>qr || r<ql) return INF;
- if(ql<=l && r<=qr){
- return seg[idx].F;
- }
- ll m=(l+r)/2;
- if(qr<=m) return querymn(idx*2,ql,qr,l,m);
- else if(ql>m) return querymn(idx*2+1,ql,qr,m+1,r);
- else return min(querymn(idx*2,ql,qr,l,m),querymn(idx*2+1,ql,qr,m+1,r));
- }
- ll querymaxi(ll idx,ll ql,ll qr,ll l,ll r){
- if(l>qr || r<ql) return -INF;
- if(ql<=l && r<=qr){
- return seg[idx].S;
- }
- ll m=(l+r)/2;
- if(qr<=m) return querymaxi(idx*2,ql,qr,l,m);
- else if(ql>m) return querymaxi(idx*2+1,ql,qr,m+1,r);
- else return max(querymaxi(idx*2,ql,qr,l,m),querymaxi(idx*2+1,ql,qr,m+1,r));
- }
- int main() {
- ios::sync_with_stdio(false),cin.tie(0);
- seg[0].F=INF;
- seg[0].S=-INF;
- freopen("milk.in","r",stdin);
- ll T;
- cin>>T;
- while(T--){
- cin>>n>>q;
- ll x,y;
- for(ll i=1;i<=n;i++){
- cin>>a[i];
- }
- build(1,1,n);
- while(q--){
- cin>>x>>y;
- if(x<=y){
- if(y>querymaxi(1,1,n,1,n)){
- cout<<"No\n";
- continue;
- }
- ll Lptr=1,step=pow(2,30);
- while(step){
- if(y<=querymaxi(1,Lptr+step,n,1,n) && Lptr+step<=n){
- Lptr+=step;
- }
- else{
- step/=2;
- }
- }
- if(min(0ll,querymn(1,1,Lptr,1,n))<=x &&
- querymaxi(1,Lptr,n,1,n)>=y) cout<<"Yes\n";
- else cout<<"No\n";
- }
- else{
- if(x>querymaxi(1,1,n,1,n)){
- cout<<"No\n";
- continue;
- }
- ll Lptr=n,step=pow(2,30);
- while(step){
- if(x<=querymaxi(1,1,Lptr-step,1,n) && Lptr-step>=1){
- Lptr-=step;
- }
- else{
- step/=2;
- }
- }
- if(max(0ll,querymaxi(1,1,Lptr,1,n))>=x &&
- querymn(1,Lptr,n,1,n)<=y) cout<<"Yes\n";
- else cout<<"No\n";
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement