제출 #1353293

#제출 시각아이디문제언어결과실행 시간메모리
1353293javkhlantogsNew Home (APIO18_new_home)C++20
12 / 100
5096 ms92240 KiB
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int main(){
	ll n,k,q,i,j,a,b,c,d;
	cin>>n>>k>>q;
	vector<vector<ll>> s;
	vector<multiset<ll>> st(k+1);
	for(i=0 ; i<n ; i++){
		cin>>a>>b>>c>>d;
		s.push_back({c,a,b,1});
		s.push_back({d+1,a,b,-1});
	}
	vector<vector<ll>> x(q,vector<ll>(3));
	for(i=0 ; i<q ; i++){
		cin>>x[i][1]>>x[i][0];
		x[i][2]=i;
	}
	sort(s.begin(),s.end());
	sort(x.begin(),x.end());
	ll ind=0;
	vector<ll> ans(q,-1);
	for(i=0 ; i<q ; i++){
		while(ind<2*n and s[ind][0]<=x[i][0]){
			if(s[ind][3]==1){
				ll type=s[ind][2],loc=s[ind][1];
				st[type].insert(loc);
				st[type].insert(-loc);
			}
				else{
					ll type=s[ind][2],loc=s[ind][1];
					st[type].erase(st[type].find(loc));
					st[type].erase(st[type].find(-loc));
				}
			ind++;
		}
		for(j=1 ; j<=k ; j++){
			if(st[j].size()==0){
				ans[x[i][2]]=-1;
				break;
			}
			ll val=1e9;
			auto itr1=st[j].lower_bound(x[i][1]);
			if(itr1!=st[j].end()) val=min(val,*itr1-x[i][1]);
			auto itr2=st[j].lower_bound(-x[i][1]);
			if(itr2!=st[j].end()) val=min(val,*itr2+x[i][1]);
			ans[x[i][2]]=max(val,ans[x[i][2]]);
		}
	}
	for(i=0 ; i<q ; i++) cout<<ans[i]<<"\n";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...