Submission #742343

#TimeUsernameProblemLanguageResultExecution timeMemory
742343victor_gaoNew Home (APIO18_new_home)C++17
10 / 100
393 ms62668 KiB
//#pragma GCC optimize("Ofast,unroll-loops,O3")
//#pragma GCC optimize("avx,avx2,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,fma,tune=native")
#include<bits/stdc++.h>
//#include<bits/extc++.h>
//#pragma pack(1)
#define fast ios::sync_with_stdio(0); cin.tie(0);
#define int long long
#define pii pair<int,int>
#define x first
#define y second
#define N 600015
using namespace std;
//using namespace __gnu_pbds;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//typedef tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> order_multiset;
//typedef tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> order_set;
int n,k,q,x[N],t[N],l[N],ans[N];
int vis[N],no;
struct lisan{
    vector<int>vt;
    void in(int x){ vt.push_back(x); }
    void build(){
        sort(vt.begin(),vt.end());
        vt.resize(unique(vt.begin(),vt.end())-vt.begin());
    }
    int idx(int x){ return upper_bound(vt.begin(),vt.end(),x)-vt.begin(); }
    int val(int x){ return vt[x-1]; }
}uni;
vector<int>all[N];
vector<pii>qry;
vector<pii>ok;
int count(pii a,int x){
    return max(abs(a.x-x),abs(a.y-x));
}
signed main(){
    fast
    cin>>n>>k>>q; no=k;
    for (int i=1;i<=n;i++){
        int a,b;
        cin>>x[i]>>t[i]>>a>>b;
        uni.in(x[i]);
    }
    for (int i=1;i<=q;i++){
        int tmp; cin>>l[i]>>tmp;
        qry.push_back({l[i],i});
    }
    sort(qry.begin(),qry.end());
    uni.build();
    for (int i=1;i<=n;i++)
        all[uni.idx(x[i])].push_back(t[i]);
    
    int l=1;
    for (int i=1;i<=uni.vt.size();i++){
        for (auto j:all[i]){
            if (!vis[j]) no--;
            vis[j]++;
        }
        if (no>0) continue;
        while (no==0){
            for (auto j:all[l]){
                if (vis[j]==1) no++;
                vis[j]--;
            }
            l++;
        }
        ok.push_back({uni.val(l-1),uni.val(i)});
    }
    int j=0;
    for (auto [p,i]:qry){
        if (ok.empty()){
            ans[i]=-1;
            continue;
        }
        while (j<(int)(ok.size())-1&&count(ok[j],p)>=count(ok[j+1],p))
            j++;
        ans[i]=count(ok[j],p);
    }
    for (int i=1;i<=q;i++)
        cout<<ans[i]<<"\n";
}

Compilation message (stderr)

new_home.cpp: In function 'int main()':
new_home.cpp:53:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for (int i=1;i<=uni.vt.size();i++){
      |                  ~^~~~~~~~~~~~~~~
#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...