답안 #1085912

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1085912 2024-09-09T04:06:19 Z Bananabread Passport (JOI23_passport) C++17
6 / 100
541 ms 120852 KB
#include<bits/stdc++.h>
#define ll long long
#define ntr "\n"
#define mod (ll)(1e9+7)
#define taskname ""
#define frep freopen(taskname".inp","r",stdin); freopen(taskname".out","w",stdout);
using namespace std;
vector<pair<ll,ll>> adj[800100];
ll id[200010];
void build(ll pos,ll l,ll r){
    if(l==r){
        id[l]=pos;
    }
    else{
        ll mid=(l+r)/2;
        build(2*pos,l,mid);
        build(2*pos+1,mid+1,r);
        adj[2*pos].push_back({pos,0});
        adj[2*pos+1].push_back({pos,0});
    }
}
void add(ll pos,ll l,ll r,ll u,ll v,ll x){
    if(v<l||u>r) return ;
    else if(u<=l&&r<=v){
        adj[pos].push_back({id[x],1});
    }
    else{
        ll mid=(l+r)/2;
        add(2*pos,l,mid,u,v,x);
        add(2*pos+1,mid+1,r,u,v,x);
    }
}
ll n,q;
ll ans[800010];
ll dist[800010];
ll vis[800010];
ll a[200010];
ll b[200010];
ll l[200001];
ll r[200001];
void proc(ll st){
    fill(dist+1,dist+4*n+10,1e18);
    fill(vis+1,vis+4*n+10,0);
    deque<ll> dq;
    dq.push_front(id[st]);
    dist[id[st]]=0;
    while(!dq.empty()){
        ll u=dq.front();
        dq.pop_front();
        if(vis[u]) continue;
        for(auto [v,w]:adj[u]){
            if(dist[v]>dist[u]+w){
                dist[v]=dist[u]+w;
                if(w==0){
                    dq.push_front(v);
                }
                else{
                    dq.push_back(v);
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        if(st==1) a[i]=dist[id[i]];
        if(st==n) b[i]=dist[id[i]];
    }
}
int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    //frep;
    cin>>n;
    build(1,1,n+1);
    for(int i=1;i<=n;i++){
        cin>>l[i]>>r[i];
        add(1,1,n+1,l[i],r[i],i);
    }
    proc(1);
    proc(n);
//    for(int i=1;i<=n+1;i++){
//        cout<<id[i]<<' ';
//    }
//    cout<<ntr;
    for(int i=1;i<=n;i++){
        adj[id[n+1]].push_back({id[i],(l[i]==1&&r[i]==n? 1 : a[i]+b[i])});
//        cout<<n+1<<' '<<i<<' '<<a[i]+b[i]<<ntr;
    }
//    cout<<ntr;
//    for(auto [v,w]:adj[id[n+1]]){
//        cout<<id[n+1]<<' '<<v<<' '<<w<<ntr;
//    }
    priority_queue<pair<ll,ll>> pq;
    pq.push({0,id[n+1]});
    fill(dist+1,dist+4*n+10,1e18);
    fill(vis+1,vis+4*n+10,0);
    dist[id[n+1]]=0;
    while(!pq.empty()){
        ll u=pq.top().second;
        pq.pop();
        if(vis[u]) continue;
        vis[u]=1;
        for(auto [v,w]:adj[u]){
            if(dist[v]>dist[u]+w){
                dist[v]=dist[u]+w;
                pq.push({-dist[v],v});
            }
        }
    }
    for(int i=1;i<=n;i++){
        ans[i]=dist[id[i]];
    }
    cin>>q;
    for(int i=1;i<=q;i++){
        ll x;
        cin>>x;
        cout<<(ans[x]<1e18 ? ans[x] : -1)<<ntr;
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 19292 KB Output is correct
2 Correct 8 ms 19292 KB Output is correct
3 Correct 9 ms 19292 KB Output is correct
4 Correct 541 ms 120852 KB Output is correct
5 Correct 289 ms 81576 KB Output is correct
6 Correct 185 ms 71356 KB Output is correct
7 Correct 206 ms 114060 KB Output is correct
8 Correct 129 ms 102132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19292 KB Output is correct
2 Correct 9 ms 19292 KB Output is correct
3 Correct 9 ms 19256 KB Output is correct
4 Correct 9 ms 19292 KB Output is correct
5 Correct 9 ms 19292 KB Output is correct
6 Correct 9 ms 19064 KB Output is correct
7 Correct 10 ms 19292 KB Output is correct
8 Incorrect 8 ms 19292 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19292 KB Output is correct
2 Correct 9 ms 19292 KB Output is correct
3 Correct 9 ms 19256 KB Output is correct
4 Correct 9 ms 19292 KB Output is correct
5 Correct 9 ms 19292 KB Output is correct
6 Correct 9 ms 19064 KB Output is correct
7 Correct 10 ms 19292 KB Output is correct
8 Incorrect 8 ms 19292 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19292 KB Output is correct
2 Correct 9 ms 19292 KB Output is correct
3 Correct 9 ms 19256 KB Output is correct
4 Correct 9 ms 19292 KB Output is correct
5 Correct 9 ms 19292 KB Output is correct
6 Correct 9 ms 19064 KB Output is correct
7 Correct 10 ms 19292 KB Output is correct
8 Incorrect 8 ms 19292 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 19292 KB Output is correct
2 Correct 8 ms 19292 KB Output is correct
3 Correct 9 ms 19292 KB Output is correct
4 Correct 541 ms 120852 KB Output is correct
5 Correct 289 ms 81576 KB Output is correct
6 Correct 185 ms 71356 KB Output is correct
7 Correct 206 ms 114060 KB Output is correct
8 Correct 129 ms 102132 KB Output is correct
9 Correct 9 ms 19292 KB Output is correct
10 Correct 9 ms 19292 KB Output is correct
11 Correct 9 ms 19256 KB Output is correct
12 Correct 9 ms 19292 KB Output is correct
13 Correct 9 ms 19292 KB Output is correct
14 Correct 9 ms 19064 KB Output is correct
15 Correct 10 ms 19292 KB Output is correct
16 Incorrect 8 ms 19292 KB Output isn't correct
17 Halted 0 ms 0 KB -