Submission #487113

#TimeUsernameProblemLanguageResultExecution timeMemory
487113RedhoodNew Home (APIO18_new_home)C++14
12 / 100
1736 ms26516 KiB
#include<bits/stdc++.h> #define fi first #define se second #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define pb push_back #define sz(x) (int)(x).size() typedef long long ll; typedef long double ld; using namespace std; int main() { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); int n , k , q; cin >> n >> k >> q; vector < int > x(n), t(n), a(n), b(n); vector < int > zipyear; for(int i = 0; i < n; ++i){ cin >> x[i] >> t[i] >> a[i] >> b[i]; b[i]++; zipyear.pb(a[i]), zipyear.pb(b[i]); } vector < pair < int , int >> que(q); for(auto &i : que){ cin >> i.fi >> i.se; zipyear.pb(i.se); } sort(all(zipyear)), zipyear.erase(unique(all(zipyear)), zipyear.end()); for(int i = 0; i < n; ++i){ a[i] = lower_bound(all(zipyear), a[i]) - zipyear.begin(); b[i] = lower_bound(all(zipyear), b[i]) - zipyear.begin(); } for(int i = 0; i < q; ++i){ que[i].se = lower_bound(all(zipyear), que[i].se) - zipyear.begin(); } vector < int > answer(q); if(k <= 400){ multiset < int > type[k + 1]; vector < pair < int , int > > open[sz(zipyear) + 1]; vector < pair < int , int > > close[sz(zipyear) + 1]; vector < pair < int , int > > pr; for(int i = 0; i < q; ++i) pr.pb({que[i].se, i}); sort(all(pr)); int year = -1; for(int i = 0; i < n; ++i){ open[a[i]].push_back({t[i], x[i]}); close[b[i]].push_back({t[i], x[i]}); } /// inc for(auto &i : pr){ while(year + 1 <= i.fi){ /// lol for(auto &shop : open[year + 1]){ type[shop.fi].insert(shop.se); } /// lol for(auto &shop : close[year + 1]){ type[shop.fi].erase(type[shop.fi].find(shop.se)); } year++; } int ans = -1; // // cout << "LOL " << i.fi << ' ' << "\n"; // for(int t =1 ;t <=k; ++t){ // cout << "TYPE " << t << '\n'; // for(auto &u : type[t]) // cout << u << ' '; // cout << endl; // } for(int t = 1;t <= k; ++t){ if(type[t].empty()){ ans = -1; break; } int dist = 1e9; auto it = type[t].lower_bound(que[i.se].fi); if(it != type[t].end()) dist = min(dist , *it - que[i.se].fi); if(it != type[t].begin()){ --it; dist = min(dist , que[i.se].fi - *it); } ans = max(ans , dist); } answer[i.se] = ans; } } for(int i = 0 ; i < q; ++i) cout << answer[i] << '\n'; return 0; } /* 4 2 4 3 1 1 10 9 2 2 4 7 2 5 7 4 1 8 10 5 3 5 6 5 9 1 10 2 1 3 1 1 1 4 1 1 2 6 1 3 1 5 1 7 1 1 1 100000000 1 1 1 1 1 */
#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...