CF1859D 题解
shinzAnmono · · 题解
CF1859D 题解
读题后发现,对于每一条线段,
当然,如果
#include<iostream>
#include<algorithm>
#include<set>
const int sz=2e5+10;
struct segment{
int l,r;
bool operator<(const segment &a)const{
return l<a.l;
}
}line[sz];
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin>>t;
while(t--){
int n,q;
std::cin>>n;
for(int i=1;i<=n;i++){
int l,r,a,b;
std::cin>>l>>r>>a>>b;
line[i]=segment{l,b};
}
std::sort(line+1,line+n+1);
std::set<segment>cur;
cur.insert(segment{0,0});
for(int i=1;i<=n;i++){
int l=line[i].l,r=line[i].r;
while(i<n&&line[i+1].l>=l&&line[i+1].l<=r)i++,r=std::max(r,line[i].r);
cur.insert(segment{l,r});
}
std::cin>>q;
for(int i=1,x;i<=q;i++){
std::cin>>x;
auto it=--cur.upper_bound(segment{x,x});
if(x<=it->r)std::cout<<it->r<<" ";
else std::cout<<x<<" ";
}
std::cout<<"\n";
}
return 0;
}