Submission #1224712

#TimeUsernameProblemLanguageResultExecution timeMemory
1224712noyancanturkCard Collection (JOI24_collection)C++20
0 / 100
1 ms328 KiB
#include<bits/stdc++.h>
using namespace std;

#define pb push_back

int main(){
  int n,q;
  cin>>n>>q;
  int a[n],b[n];
  vector<int>v;
  for(int i=0;i<n;i++){
    cin>>a[i]>>b[i];
    v.pb(a[i]);
    v.pb(b[i]);
  }
  sort(v.begin(),v.end());
  v.resize(unique(v.begin(),v.end())-v.begin());
  int m=v.size();
  map<int,int>tr;
  for(int i=0;i<m;i++){
    tr[v[i]]=i;
  }
  int have1[m]{},have2[m]{};
  for(int i=0;i<n;i++){
    have1[a[i]=tr[a[i]]]++;
    have2[b[i]=tr[b[i]]]++;
  }
  int mini1[m]{},maxi1[m]{},mini2[m]{},maxi2[m]{};
  for(int i=0;i<m;i++){
    mini1[i]=mini2[i]=INT_MAX;
  }
  for(int i=0;i<n;i++){
    mini1[a[i]]=min(mini1[a[i]],b[i]);
    maxi1[a[i]]=max(maxi1[a[i]],b[i]);
    mini2[b[i]]=min(mini2[b[i]],a[i]);
    maxi2[b[i]]=max(maxi2[b[i]],a[i]);
  }
  int mn1[m]{},mx1[m]{},mn2[m]{},mx2[m]{};
  mn1[m-1]=mini1[m-1];
  mx1[0]=maxi1[0];
  mn2[m-1]=mini2[m-1];
  mx2[0]=maxi2[0];
  for(int i=1;i<m;i++){
    mn1[m-i-1]=min(mini1[m-i-1],mn1[m-i]);
    mx1[i]=min(maxi1[i],mx1[i-1]);
    mn2[m-i-1]=min(mini2[m-i-1],mn2[m-i]);
    mx2[i]=min(maxi2[i],mx2[i-1]);
  }
  sort(a,a+n);
  sort(b,b+n);
  for(int ind=1;ind<=q;ind++){
    int x,y;
    cin>>x>>y;
    if(!tr.count(x)||!tr.count(y))continue;
    x=tr[x],y=tr[y];
    if(!have1[x]||!have2[y])continue;
    if(have1[x]==1&&have2[y]==1&&mini1[x]==y){
      if((x==a[0]&&y==b[n-1])||(x==a[n-1]&&y==b[0])){
        
      }else{
        cout<<ind<<' ';
      }
      continue;
    }
    if((mn1[x]<=y&&mn2[y]<=x)||(y<=mx1[x]&&x<=mx2[y])){
      cout<<ind<<' ';
    }
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...