Submission #401986

#TimeUsernameProblemLanguageResultExecution timeMemory
401986teehandsomeNew Home (APIO18_new_home)C++17
12 / 100
5060 ms51532 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define endl '\n' #define INF 1e9+7 #define all(x) x.begin(),x.end() using namespace std; using namespace __gnu_pbds; using ll=long long; using pii=pair<int,int>; using ppi=pair<int,pii>; using oset=tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>; template<typename T> void _print(vector<T> x) {cerr<<"{"; for(auto e:x) cerr<<e<<","; cerr<<"}";} void _print(pii x) {cerr<<"{"<<x.first<<","<<x.second<<"}";} template<typename T> void _print(T x) {cerr<<x;} void dbg() {cerr<<endl;} template<typename Head,typename... Tail> void dbg(Head H,Tail... T) { _print(H); if(sizeof...(T)) cerr<<","; else cerr<<"\"]"; dbg(T...); } #define debug(...) cerr<<"["<<#__VA_ARGS__<<"]:[\"",dbg(__VA_ARGS__) //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); struct dt { int s,t,x; dt(int S,int T,int X) { s=S,t=T,x=X; } }; bool operator<(const dt &l,const dt &r) { if(l.x==r.x) { if(l.s==r.s) return l.t<r.t; return l.s<r.s; } return l.x<r.x; } const int mxn=3e5+10; int n,q,k; vector<dt> a[mxn]; vector<dt> av[mxn]; #define fi first #define se second void deebug(vector<dt> ar) { int len=ar.size(); cout<<"------"<<endl; for(int i=0;i<len;i++) { cout<<ar[i].s<<" "<<ar[i].t<<" "<<ar[i].x<<endl; } cout<<"====="<<endl; } int main () { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k>>q; for(int i=0;i<n;i++) { int x,tt,u,v; cin>>x>>tt>>u>>v; a[tt].push_back({u,v,x}); } for(int i=1;i<=k;i++) { av[i]=a[i]; sort(all(a[i]),[&](const dt &l,const dt &r) { if(l.s==r.s) return l.t<r.t; return l.s<r.s; }); sort(all(av[i]),[&](const dt &l,const dt &r) { return l.t<r.t; }); } vector<int> ans(q); vector<ppi> que(q); // {time , {pos,idx}} for(int i=0;i<q;i++) { cin>>que[i].se.fi>>que[i].fi; que[i].se.se=i; } sort(all(que)); vector<int> lu(k+1,0),lv(k+1,0); multiset<dt> s[k+1]; // for(int i=1;i<=k;i++) { // deebug(a[i]); // deebug(av[i]); // } for(int i=0;i<q;i++) { int t=que[i].fi; int idx=que[i].se.se; int pos=que[i].se.fi; // debug(i,t,pos,idx); int mx=0; bool ok=true; for(int j=1;j<=k;j++) { int sz=a[j].size(); while(lu[j]<sz and a[j][lu[j]].s<=t) { s[j].insert(a[j][lu[j]]); lu[j]++; } while(lv[j]<sz and av[j][lv[j]].t<t) { auto temp=s[j].find(av[j][lv[j]]); if(temp!=s[j].end()) s[j].erase(s[j].find(av[j][lv[j]])); else assert(false); lv[j]++; } // debug(j,lu[j],lv[j]); if(s[j].empty()) ok=false; else { // for(auto e:s[j]) { // cout<<"# "<<e.x<<" "<<e.s<<" "<<e.t<<endl; // } dt temp(-1,-1,pos); auto pp1=s[j].lower_bound(temp); auto pp2=pp1; --pp2; dt p1(0,0,INF),p2(0,0,INF); if(pp1!=s[j].end()) p1=*pp1; if(pp2!=s[j].end()) p2=*pp2; // cout<<"% "<<p1.x<<" "<<p1.s<<" "<<p1.t<<endl; // cout<<"% "<<p2.x<<" "<<p2.s<<" "<<p2.t<<endl; // cout<<p1.x<<","<<p2.x<<endl; int d=min(abs(p1.x-pos),abs(p2.x-pos)); // debug(j,d); mx=max(mx,d); } } if(!ok) ans[idx]=-1; else ans[idx]=mx; } for(int i=0;i<q;i++) { cout<<ans[i]<<endl; } }
#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...