Submission #1332063

#TimeUsernameProblemLanguageResultExecution timeMemory
1332063NipphitchCircus (Balkan15_CIRCUS)C++20
100 / 100
736 ms16008 KiB
#include "circus.h"
#include <bits/stdc++.h>
using namespace std;
#define a2 array <int,2> 
#define a3 array <int,3>
const int INF=1e9+7;

map <int,int> best_f,best_r;

void init(int n, int m, int p[]){
    sort(p,p+n);
    vector <a2> d(n,{INF,INF});
    priority_queue <a3> pq;
    for(int i=0;i<n;i++) pq.push({{-(m-p[i]),i,0}});
    while(!pq.empty()){
        auto [d_u,u,c_u]=pq.top();
        pq.pop();
        d_u*=-1;
        if(d[u][c_u]<=d_u) continue;
        d[u][c_u]=d_u;
        if(c_u==0 && u>0) pq.push({-(d_u+p[u]-p[u-1]),u-1,0});
        else if(c_u==1 && u<n-1) pq.push({-(d_u+p[u+1]-p[u]),u+1,1});
        int nxt=lower_bound(p,p+n,p[u]+d_u)-p;
        if(nxt<n) pq.push({-(p[nxt]-p[u]),nxt,1});
        nxt=upper_bound(p,p+n,p[u]-d_u)-p-1;
        if(nxt>=0) pq.push({-(p[u]-p[nxt]),nxt,0});
    }
    for(int i=0;i<n;i++) d[i][0]=min(d[i][0],d[i][1]);
    vector <int> ord(n);
    iota(ord.begin(),ord.end(),0);
    sort(ord.begin(),ord.end(),[&](int x,int y)->bool{return p[x]-d[x][0]>p[y]-d[y][0];});
    int best=INF;
    for(int i:ord){
        best=min(best,p[i]);
        best_f[p[i]-d[i][0]]=best;
    }
    sort(ord.begin(),ord.end(),[&](int x,int y)->bool{return p[x]+d[x][0]<p[y]+d[y][0];});
    best=-INF;
    for(int i:ord){
        best=max(best,p[i]);
        best_r[p[i]+d[i][0]]=best;
    }
    best_f[m]=m;
}
int minLength(int d) {
    int best=INF;
    auto it=best_f.lower_bound(d);
    if(it!=best_f.end()) best=min(best,(it->second)-d);
    it=best_r.upper_bound(d);
    if(it!=best_r.begin()){
        it--;
        best=min(best,d-(it->second));
    }
    return best;
}

Compilation message (stderr)

grader.cpp: In function 'int main()':
grader.cpp:16:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |         scanf("%d%d", &N, &M);
      |         ~~~~~^~~~~~~~~~~~~~~~
grader.cpp:18:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |                 scanf("%d", &P[i]);
      |                 ~~~~~^~~~~~~~~~~~~
grader.cpp:21:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         scanf("%d", &Q);
      |         ~~~~~^~~~~~~~~~
grader.cpp:23:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |                 scanf("%d", &d);
      |                 ~~~~~^~~~~~~~~~
#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...