제출 #921047

#제출 시각아이디문제언어결과실행 시간메모리
921047beepbeepsheepTrampoline (info1cup20_trampoline)C++17
0 / 100
2086 ms90676 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ii pair<ll,ll> const ll inf=1e15; const ll maxn=2e5+5; vector<ii> tramps; ll lo[maxn],hi[maxn]; struct qry{ ll r1,c1,r2,c2,id; qry(ll a,ll b, ll c, ll d, ll e){ r1=a,c1=b,r2=c,c2=d,id=e; } }; vector<qry> queries; void dnc(ll l, ll r, vector<ii> tramp, vector<qry> que){ ll m=(l+r)>>1; cerr<<l<<' '<<r<<endl; if (l==r){ sort(tramp.begin(),tramp.end()); for (auto u:que){ ll lpos=lower_bound(tramp.begin(),tramp.end(),make_pair(u.r1,u.c1)) -tramp.begin(); ll rpos=upper_bound(tramp.begin(),tramp.end(),make_pair(u.r2,u.c2)) -tramp.begin(); if (rpos-lpos==u.r2-u.r1) lo[u.id]=inf; } return; } vector<ii> lt,rt; // left tramp, right tramp vector<qry> lq,rq,uq; //left query, right query, useful query for (auto u:que){ if (u.c1>m) rq.emplace_back(u.r1,u.c1,u.r2,u.c2,u.id); else if (u.c2<=m) lq.emplace_back(u.r1,u.c1,u.r2,u.c2,u.id); else uq.emplace_back(u.r1,u.c1,u.r2,u.c2,u.id); } for (auto u:tramp){ if (u.second>m) rt.emplace_back(u.first+1,u.second); else lt.emplace_back(u); } vector<ll> lh(lt.size()),rh(rt.size()); // left tramp lowest height, right tramp highest height sort(lt.begin(),lt.end()); //eval highest trampolines first sort(rt.begin(),rt.end()); //eval lowest trampolines first for (int i=lt.size()-1;i>=0;i--){ lh[i]=lt[i].first+1; ll pos=lower_bound(lt.begin(),lt.end(),make_pair(lt[i].first+1,lt[i].second)) -lt.begin(); if (lt[pos].first==lt[i].first+1) lh[i]=lh[pos]; cerr<<lh[i]<<' '<<lt[i].first<<' '<<lt[i].second<<endl; } for (int i=0;i<rt.size();i++){ rh[i]=rt[i].first-1; ll pos=upper_bound(rt.begin(),rt.end(),make_pair(rt[i].first-1,rt[i].second)) -rt.begin(); if (rt[pos].first==rt[i].first-1) rh[i]=rh[pos]; cerr<<rh[i]<<' '<<rt[i].first<<' '<<rt[i].second<<endl; } vector<tuple<ll,ll,ll>> s,e; for (auto u:uq){ ll pos=lower_bound(lt.begin(),lt.end(),make_pair(u.r1,u.c1)) -lt.begin(); if (pos==lt.size() || u.r1!=lt[pos].first) lo[u.id]=u.r1; else lo[u.id]=lh[pos]; pos=upper_bound(rt.begin(),rt.end(),make_pair(u.r2,u.c2)) -rt.begin(); pos--; if (pos==-1 || u.r2!=rt[pos].first) hi[u.id]=u.r2; else hi[u.id]=rh[pos]; cerr<<u.r2<<' '<<rt[pos].first<<endl; cerr<<u.id<<' '<<lo[u.id]<<' '<<hi[u.id]<<'x'<<endl; } for (auto &u:rt){ u.first-=1; } dnc(l,m,lt,lq); dnc(m+1,r,rt,rq); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll r,c,t; cin>>r>>c>>t; ll a,b; for (int i=1;i<=t;i++){ cin>>a>>b; tramps.emplace_back(a,b); } ll q,e,d; cin>>q; for (int i=1;i<=q;i++){ cin>>a>>b>>e>>d; if (a>e || b>d){ lo[i]=-inf; continue; } queries.emplace_back(a,b,e,d,i); } dnc(1,c,tramps,queries); for (int i=1;i<=q;i++) cout<<(lo[i]>=hi[i]?"Yes":"No")<<endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

trampoline.cpp: In function 'void dnc(long long int, long long int, std::vector<std::pair<long long int, long long int> >, std::vector<qry>)':
trampoline.cpp:53:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for (int i=0;i<rt.size();i++){
      |                  ~^~~~~~~~~~
trampoline.cpp:64:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |         if (pos==lt.size() || u.r1!=lt[pos].first) lo[u.id]=u.r1;
      |             ~~~^~~~~~~~~~~
#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...