Submission #1174500

#TimeUsernameProblemLanguageResultExecution timeMemory
1174500sleepntsheepPassport (JOI23_passport)C11
0 / 100
0 ms324 KiB
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N_ (3*N)
#define N 900005
#define M_ 99999990

int xx,n,q,rt,ii,head[N_],vv[M_],ww[M_],nxt[M_],jj,dp1[N_],dp2[N_],tt[N_+N_],*dp,dp3[N_];

void pul(int i){ tt[i]=tt[i*2+(dp[tt[i*2+1]]<dp[tt[i*2]])]; }
void fix(int i){ for(i+=ii;i/=2;)pul(i); }

void lnk(int v,int u,int w) {
    int i=++jj;
    ww[i]=w;
    vv[i]=v;
    nxt[i]=head[u];
    head[u]=i;
}
void lnk2(int v,int l,int r,int x,int y,int k) {
    if(r<x||y<l)return;
    if(x<=l&&r<=y){
        lnk(k,v,0);
        return;
    }
    int m=(l+r)/2,vr=v+2*(m-l+1);
    lnk2(v+1,l,m,x,y,k);
    lnk2(vr,m+1,r,x,y,k);
}

void build(int v,int l,int r){
    ii=v+1;
    if(l==r){
        lnk(v,l,0);
        return;
    }
    int m=(l+r)/2,vr=v+2*(m-l+1);
    build(v+1,l,m);
    build(vr,m+1,r);
    lnk(v,vr,0);
    lnk(v,v+1,0);
}

void bfs(int src){
    static int qu[N_+N_],hd,tl;
    hd=tl=N_; qu[tl]=src;++hd;
    while(hd-tl){
        int u=qu[tl++];
        for(int j=head[u];j;j=nxt[j]){
            if(dp[vv[j]]>dp[u]+ww[j]){
                dp[vv[j]]=dp[u]+ww[j];
                if(ww[j]) qu[hd++]=vv[j];
                else qu[--tl]=vv[j];
            }
        }
    }
}

int main()
{
    scanf("%d",&n);
    build(n,0,n-1);

    for(int ll,rr,i=0;i<n;++i){
        scanf("%d%d",&ll,&rr);
        int br=ii++;
        lnk(ii,i,1);
        lnk2(n,0,n-1,ll-1,rr-1,i);
    }

    dp=dp1;
    for(int i=0;i<ii;++i)dp[i]=i?1e9:0;
    bfs(0);
    dp=dp2;
    for(int i=0;i<ii;++i)dp[i]=i==n-1?0:1e9;
    bfs(n-1);

    dp=dp3;
    for(int i=0;i<ii;++i)dp[i]=dp1[i]+dp2[i],tt[ii+i]=i;
    for(int i=n;i<ii;++i)dp[i]=1e9;
    dp[ii]=1e9+1;
    for(int i=ii;--i;)pul(i);
    for(int it=0;it<ii;++it){
        int u=tt[1];
        tt[ii+u]=ii;
        fix(u);
        for(int j=head[u];j;j=nxt[j]){
            if(tt[vv[j]+ii]==vv[j]&&dp[u]+ww[j]<dp[vv[j]]){
                dp[vv[j]]=dp[u]+ww[j];
                fix(vv[j]);
            }
        }
    }

    scanf("%d",&q);
    while(q--)scanf("%d",&xx),--xx,printf("%d\n",dp3[xx]>=1e9?-1:dp3[xx]);
}

Compilation message (stderr)

passport.c: In function 'main':
passport.c:62:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |     scanf("%d",&n);
      |     ^~~~~~~~~~~~~~
passport.c:66:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         scanf("%d%d",&ll,&rr);
      |         ^~~~~~~~~~~~~~~~~~~~~
passport.c:96:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |     scanf("%d",&q);
      |     ^~~~~~~~~~~~~~
passport.c:97:15: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |     while(q--)scanf("%d",&xx),--xx,printf("%d\n",dp3[xx]>=1e9?-1:dp3[xx]);
      |               ^~~~~~~~~~~~~~~
#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...