Submission #730880

# Submission time Handle Problem Language Result Execution time Memory
730880 2023-04-26T14:53:15 Z grogu Passport (JOI23_passport) C++14
16 / 100
1029 ms 930652 KB
#define here cerr<<"===========================================\n"
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#include <bits/stdc++.h>
#define ld double
#define ll long long
#define ull unsigned long long
#define llinf 100000000000000000LL // 10^17
#define iinf 2000000000 // 2*10^9
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define endl '\n'
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define all(a) a.begin(),a.end()
using namespace std;

#define maxn 5005
#define lg 15
ll n,q;
pll a[maxn];
vector<ll> g[maxn*maxn];
ll dis[maxn*maxn];
ll lg2[maxn];
pll st[lg][maxn];
ll st2[lg][maxn];
ll kod(pll p){return p.fi*(n+1) + p.sc;}
pll rev(ll x){return {x/(n+1),x%(n+1)};}
void upd(ll x,ll y,ll w){
    g[x].pb(y);
    //cerr<<rev(x).fi<< " "<<rev(x).sc<< " "<<rev(y).fi<< " "<<rev(y).sc<<endl;
}
void getdis(ll poc){
    for(ll i = 1;i<maxn*maxn;i++) dis[i] = llinf;
    dis[poc] = 0;
    queue<ll> pq;
    pq.push(poc);
    while(pq.size()){
        ll u = pq.front();
        pq.pop();
        for(ll s : g[u]){
            if(dis[u]+1<dis[s]){
                dis[s] = dis[u] + 1;
                pq.push(s);
            }
        }
    }
}
ll mrg(ll x,ll y){
    if(a[x].sc-a[x].fi>a[y].sc-a[y].fi) return x;
    return y;
}
pll mrg(pll p,pll q){
    pll ans;
    if(a[p.fi].fi<a[q.fi].fi) ans.fi = p.fi;
    else if(a[p.fi].fi==a[q.fi].fi){
        if(a[p.fi].sc>a[q.fi].sc) ans.fi = p.fi;
        else ans.fi = q.fi;
    }else ans.fi = q.fi;
    if(a[p.sc].sc>a[q.sc].sc) ans.sc = p.sc;
    else if(a[p.sc].sc==a[q.sc].sc){
        if(a[p.sc].fi<a[q.sc].fi) ans.sc = p.sc;
        else ans.sc = q.sc;
    }else ans.sc = q.sc;
    return ans;
}
pair<pll,ll> get(ll l,ll r){
    ll len = r-l+1;
    ll x = lg2[len];
    ll len2 = (1<<x);
    pll p = st[x][l];
    pll q = st[x][r-len2+1];
    pll ans = mrg(p,q);
    ll px = st2[x][l];
    ll py = st2[x][r-len2+1];
    ll ansx = mrg(px,py);
    return {ans,ansx};
}
int main(){
	ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0);
	for(ll j = 0;j<lg;j++) if((1<<j)<maxn) lg2[(1<<j)] = j;
	for(ll j = 2;j<maxn;j++){
        if(lg2[j]) continue;
        lg2[j] = lg2[j-1];
	}
    cin >> n;
    for(ll i = 1;i<=n;i++){
        cin >> a[i].fi >> a[i].sc;
        st[0][i] = {i,i};
        st2[0][i] = i;
    }
    for(ll j = 1;j<lg;j++){
        for(ll i = 1;i<=n;i++){
            if(i+(1<<j)-1>n) continue;
            st[j][i] = mrg(st[j-1][i],st[j-1][i+(1<<(j-1))]);
            st2[j][i] = mrg(st2[j-1][i],st2[j-1][i+(1<<(j-1))]);
        }
    }
    for(ll len = 1;len<=n;len++){
        for(ll i = 1;i+len-1<=n;i++){
            ll l = i,r = i+len-1;
            pair<pll,ll> q = get(l,r);
            upd(kod({l,r}),kod(a[q.sc]),1);
            pll p = q.fi;
            upd(kod({l,r}),kod({a[p.fi].fi,max(r,a[p.fi].sc)}),1);
            upd(kod({l,r}),kod({min(l,a[p.sc].fi),a[p.sc].sc}),1);
        }
    }
    cin >> q;
    while(q--){
        ll x; cin >> x;
        getdis(kod({x,x}));
        ll ans = dis[kod({1,n})];
        if(ans==llinf) cout<<-1<<endl;
        else cout<<ans<<endl;
    }
	return 0;
}
/**
4
1 3
2 4
2 3
4 4
1
1

5
1 5
2 4
2 3
3 5
1 5
1
3

5
1 1
2 3
1 5
3 4
5 5
5
1
2
3
4
5

4
1 2
1 2
3 4
3 4
4
1
2
3
4
**/
# Verdict Execution time Memory Grader output
1 Correct 348 ms 784724 KB Output is correct
2 Correct 351 ms 784640 KB Output is correct
3 Correct 355 ms 784636 KB Output is correct
4 Runtime error 540 ms 912856 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 370 ms 784716 KB Output is correct
2 Correct 342 ms 784652 KB Output is correct
3 Correct 365 ms 784692 KB Output is correct
4 Correct 377 ms 784704 KB Output is correct
5 Correct 411 ms 784652 KB Output is correct
6 Correct 347 ms 784712 KB Output is correct
7 Correct 361 ms 784804 KB Output is correct
8 Correct 348 ms 784684 KB Output is correct
9 Correct 378 ms 784632 KB Output is correct
10 Correct 342 ms 784692 KB Output is correct
11 Correct 360 ms 786720 KB Output is correct
12 Correct 363 ms 786844 KB Output is correct
13 Correct 359 ms 786924 KB Output is correct
14 Correct 362 ms 786652 KB Output is correct
15 Correct 359 ms 787144 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 370 ms 784716 KB Output is correct
2 Correct 342 ms 784652 KB Output is correct
3 Correct 365 ms 784692 KB Output is correct
4 Correct 377 ms 784704 KB Output is correct
5 Correct 411 ms 784652 KB Output is correct
6 Correct 347 ms 784712 KB Output is correct
7 Correct 361 ms 784804 KB Output is correct
8 Correct 348 ms 784684 KB Output is correct
9 Correct 378 ms 784632 KB Output is correct
10 Correct 342 ms 784692 KB Output is correct
11 Correct 360 ms 786720 KB Output is correct
12 Correct 363 ms 786844 KB Output is correct
13 Correct 359 ms 786924 KB Output is correct
14 Correct 362 ms 786652 KB Output is correct
15 Correct 359 ms 787144 KB Output is correct
16 Correct 952 ms 913696 KB Output is correct
17 Incorrect 1029 ms 930652 KB Output isn't correct
18 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 370 ms 784716 KB Output is correct
2 Correct 342 ms 784652 KB Output is correct
3 Correct 365 ms 784692 KB Output is correct
4 Correct 377 ms 784704 KB Output is correct
5 Correct 411 ms 784652 KB Output is correct
6 Correct 347 ms 784712 KB Output is correct
7 Correct 361 ms 784804 KB Output is correct
8 Correct 348 ms 784684 KB Output is correct
9 Correct 378 ms 784632 KB Output is correct
10 Correct 342 ms 784692 KB Output is correct
11 Correct 360 ms 786720 KB Output is correct
12 Correct 363 ms 786844 KB Output is correct
13 Correct 359 ms 786924 KB Output is correct
14 Correct 362 ms 786652 KB Output is correct
15 Correct 359 ms 787144 KB Output is correct
16 Correct 952 ms 913696 KB Output is correct
17 Incorrect 1029 ms 930652 KB Output isn't correct
18 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 348 ms 784724 KB Output is correct
2 Correct 351 ms 784640 KB Output is correct
3 Correct 355 ms 784636 KB Output is correct
4 Runtime error 540 ms 912856 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -