Advertisement
hsiuyee

G. You're Milky

Apr 27th, 2023 (edited)
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <cstdio>
  3. #define ll long long
  4. #define pll pair<ll,ll>
  5. #define F first
  6. #define S second
  7. using namespace std;
  8.  
  9. const ll MAXN=1e5+5;
  10. const ll INF=1e18;
  11.  
  12. ll n,q,a[MAXN];
  13. pll seg[MAXN*4];
  14. string s;
  15.  
  16. void build(ll idx, ll l,ll r) {
  17.     if(l==r) {
  18.         seg[idx].F=a[l];
  19.         seg[idx].S=a[l];
  20.     }
  21.     else {
  22.         ll m=(l+r)/2;
  23.         build(idx*2,l,m);
  24.         build(idx*2+1,m+1,r);
  25.         seg[idx].F=min(seg[idx*2].F,seg[idx*2+1].F);
  26.         seg[idx].S=max(seg[idx*2].S,seg[idx*2+1].S);
  27.     }
  28. }
  29.  
  30. ll querymn(ll idx,ll ql,ll qr,ll l,ll r){
  31.     if(l>qr || r<ql) return INF;
  32.     if(ql<=l && r<=qr){
  33.         return seg[idx].F;
  34.     }
  35.     ll m=(l+r)/2;
  36.     if(qr<=m) return querymn(idx*2,ql,qr,l,m);
  37.     else if(ql>m) return querymn(idx*2+1,ql,qr,m+1,r);
  38.     else return min(querymn(idx*2,ql,qr,l,m),querymn(idx*2+1,ql,qr,m+1,r));
  39. }
  40.  
  41. ll querymaxi(ll idx,ll ql,ll qr,ll l,ll r){
  42.     if(l>qr || r<ql) return -INF;
  43.     if(ql<=l && r<=qr){
  44.         return seg[idx].S;
  45.     }
  46.     ll m=(l+r)/2;
  47.     if(qr<=m) return querymaxi(idx*2,ql,qr,l,m);
  48.     else if(ql>m) return querymaxi(idx*2+1,ql,qr,m+1,r);
  49.     else return max(querymaxi(idx*2,ql,qr,l,m),querymaxi(idx*2+1,ql,qr,m+1,r));
  50. }
  51. int main() {
  52.     ios::sync_with_stdio(false),cin.tie(0);
  53.     seg[0].F=INF;
  54.     seg[0].S=-INF;
  55.     freopen("milk.in","r",stdin);
  56.     ll T;
  57.     cin>>T;
  58.     while(T--){
  59.         cin>>n>>q;
  60.         ll x,y;
  61.         for(ll i=1;i<=n;i++){
  62.             cin>>a[i];
  63.         }
  64.         build(1,1,n);
  65.         while(q--){
  66.             cin>>x>>y;
  67.             if(x<=y){
  68.                 if(y>querymaxi(1,1,n,1,n)){
  69.                     cout<<"No\n";  
  70.                     continue;
  71.                 }
  72.                 ll Lptr=1,step=pow(2,30);
  73.                 while(step){
  74.                     if(y<=querymaxi(1,Lptr+step,n,1,n) && Lptr+step<=n){
  75.                         Lptr+=step;
  76.                     }
  77.                     else{
  78.                         step/=2;
  79.                     }
  80.                 }
  81.                 if(min(0ll,querymn(1,1,Lptr,1,n))<=x &&
  82.                     querymaxi(1,Lptr,n,1,n)>=y) cout<<"Yes\n";
  83.                 else cout<<"No\n"; 
  84.             }
  85.             else{
  86.                 if(x>querymaxi(1,1,n,1,n)){
  87.                     cout<<"No\n";
  88.                     continue;
  89.                 }
  90.                 ll Lptr=n,step=pow(2,30);
  91.                 while(step){
  92.                     if(x<=querymaxi(1,1,Lptr-step,1,n) && Lptr-step>=1){
  93.                         Lptr-=step;
  94.                     }
  95.                     else{
  96.                         step/=2;
  97.                     }
  98.                 }
  99.                 if(max(0ll,querymaxi(1,1,Lptr,1,n))>=x &&
  100.                     querymn(1,Lptr,n,1,n)<=y) cout<<"Yes\n";
  101.                 else  cout<<"No\n";
  102.             }
  103.         }
  104.     }
  105. }
Tags: JCPC 2022
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement