Submission #59891

#TimeUsernameProblemLanguageResultExecution timeMemory
59891dukati8New Home (APIO18_new_home)C++14
5 / 100
5100 ms93904 KiB
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a; i<int(b); i++)
#define all(x) x.begin(),x.end()
int main() {
  int n,q,k;
  cin >> n >> k >> q;
  vector<vector<int> > stores(n);
  rep (i,0,n) {
    int x,t,a,b;
    cin >> x >> t >> a >> b;
    stores[i]={a,b,x,t};
  }
  vector< vector<int> > queries(q);
  rep (i,0,q) {
    int l,y;
    cin >> l >> y;
    queries[i]={y,l,i};
  }
  sort(queries.begin(),queries.end());
  vector<int> answers(q);
  sort(all(stores));
  vector< set<vector<int> > > types(k);
  int numtaken=0;
  set<vector<int> > takenstores;
  rep (i,0,q) {
    int l,y,index;
    l=queries[i][1];
    y=queries[i][0];
    index=queries[i][2];
    while(numtaken<n && y>=stores[numtaken][0]) {
      int x,t,a,b;
      x=stores[numtaken][2];
      t=stores[numtaken][3];
      a=stores[numtaken][0];
      b=stores[numtaken][1];
      takenstores.insert({b,a,x,t});
      types[t-1].insert({x,a,b,t});
      numtaken++;
    }
    while (!takenstores.empty() && (*takenstores.begin())[0]<y) {
      auto it = takenstores.begin();
      int x,t,a,b;
      x=(*it)[2];
      t=(*it)[3];
      a=(*it)[1];
      b=(*it)[0];
      takenstores.erase(it);
      types[t-1].erase({x,a,b,t});
    }
    int best=0;
    rep (ind,0,k) {
      int temp=1e9;
      if (types[ind].empty()) {best=-1; break;}
      auto it = types[ind].upper_bound({l,0,0,0});
      if (it!=types[ind].end()) {
        temp=(*it)[0]-l;
      }
      if (it!=types[ind].begin()) {
        it ==--it;
        temp=min(temp,l-(*it)[0]);
      }
      best=max(best,temp);
    }
    answers[index]=best;
  }
  rep(i,0,q) {
    cout << answers[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...