답안 #985061

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
985061 2024-05-17T10:08:56 Z GrindMachine Passport (JOI23_passport) C++17
100 / 100
764 ms 96180 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define sz(a) (int)a.size()
#define setbits(x) __builtin_popcountll(x)
#define ff first
#define ss second
#define conts continue
#define ceil2(x,y) ((x+y-1)/(y))
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl

#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
#define rev(i,s,e) for(int i = s; i >= e; --i)
#define trav(i,a) for(auto &i : a)

template<typename T>
void amin(T &a, T b) {
    a = min(a,b);
}

template<typename T>
void amax(T &a, T b) {
    a = max(a,b);
}

#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif

/*

read some solutions long back, remember some key ideas from there

*/

const int MOD = 1e9 + 7;
const int N = 6e5 + 5;
const int inf1 = int(1e9) + 5;
const ll inf2 = ll(1e18) + 5;

vector<pii> adj[N];

template<typename T>
struct segtree {
    // https://codeforces.com/blog/entry/18051

    int n;

    segtree() {

    }

    segtree(int siz) {
        init(siz);
    }

    void init(int siz) {
        n = siz;
        build();
    }

    void build() {
        rep1(i,n-1){
            adj[i<<1].pb({i,0});
            adj[i<<1|1].pb({i,0});
        }
    }

    void rupd(int l, int r, int i){
        for(l += n, r += n; l <= r; l >>= 1, r >>= 1){
            if(l&1){
                adj[l].pb({i,0});
                l++;
            }

            if(!(r&1)){
                adj[r].pb({i,0});
                r--;
            }
        }
    }
};

void solve(int test_case)
{
    int n; cin >> n;
    vector<pii> a(n);
    rep(i,n) cin >> a[i].ff >> a[i].ss;
    rep(i,n) a[i].ff--, a[i].ss--;

    segtree<int> st(n);
    int ptr = 2*n;

    rep(i,n){
        auto [l,r] = a[i];
        adj[ptr].pb({i+n,1});
        st.rupd(l,r,ptr);
        ptr++;
    }

    auto dijkstra = [&](vector<pii> src){
        priority_queue<pii,vector<pii>,greater<pii>> pq;
        vector<bool> vis(3*n);
        vector<int> dis(3*n,inf1);

        for(auto [u,d] : src){
            pq.push({d,u});   
            dis[u] = d;
        }

        while(!pq.empty()){
            auto [cost,u] = pq.top();
            pq.pop();

            if(vis[u]) conts;
            vis[u] = 1;

            for(auto [v,w] : adj[u]){
                if(cost+w < dis[v]){
                    pq.push({cost+w,v});
                    dis[v] = cost+w;
                }
            }
        }

        return dis;
    };

    auto d1 = dijkstra({{0+n,0}});
    auto d2 = dijkstra({{n-1+n,0}});
    vector<pii> sum(3*n);
    rep(i,3*n) sum[i].ff = i;
    rep(i,3*n) sum[i].ss = min(d1[i]+d2[i],inf1);

    auto d3 = dijkstra(sum);

    int q; cin >> q;

    while(q--){
        int i; cin >> i;
        i += n-1;
        int ans = d3[i];
        if(ans >= inf1) ans = -1;
        cout << ans << endl;
    }
}

int main()
{
    fastio;

    int t = 1;
    // cin >> t;

    rep1(i, t) {
        solve(i);
    }

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14428 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 5 ms 14392 KB Output is correct
4 Correct 764 ms 84488 KB Output is correct
5 Correct 341 ms 67504 KB Output is correct
6 Correct 199 ms 64304 KB Output is correct
7 Correct 330 ms 84444 KB Output is correct
8 Correct 178 ms 74556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14428 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 3 ms 14428 KB Output is correct
4 Correct 4 ms 14428 KB Output is correct
5 Correct 4 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 4 ms 14428 KB Output is correct
8 Correct 4 ms 14428 KB Output is correct
9 Correct 4 ms 14552 KB Output is correct
10 Correct 5 ms 14428 KB Output is correct
11 Correct 4 ms 14428 KB Output is correct
12 Correct 5 ms 14424 KB Output is correct
13 Correct 5 ms 14428 KB Output is correct
14 Correct 5 ms 14424 KB Output is correct
15 Correct 4 ms 14428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14428 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 3 ms 14428 KB Output is correct
4 Correct 4 ms 14428 KB Output is correct
5 Correct 4 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 4 ms 14428 KB Output is correct
8 Correct 4 ms 14428 KB Output is correct
9 Correct 4 ms 14552 KB Output is correct
10 Correct 5 ms 14428 KB Output is correct
11 Correct 4 ms 14428 KB Output is correct
12 Correct 5 ms 14424 KB Output is correct
13 Correct 5 ms 14428 KB Output is correct
14 Correct 5 ms 14424 KB Output is correct
15 Correct 4 ms 14428 KB Output is correct
16 Correct 7 ms 15192 KB Output is correct
17 Correct 6 ms 14940 KB Output is correct
18 Correct 9 ms 15196 KB Output is correct
19 Correct 7 ms 15192 KB Output is correct
20 Correct 5 ms 14936 KB Output is correct
21 Correct 7 ms 14940 KB Output is correct
22 Correct 6 ms 15196 KB Output is correct
23 Correct 6 ms 15448 KB Output is correct
24 Correct 6 ms 15196 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14428 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 3 ms 14428 KB Output is correct
4 Correct 4 ms 14428 KB Output is correct
5 Correct 4 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 4 ms 14428 KB Output is correct
8 Correct 4 ms 14428 KB Output is correct
9 Correct 4 ms 14552 KB Output is correct
10 Correct 5 ms 14428 KB Output is correct
11 Correct 4 ms 14428 KB Output is correct
12 Correct 5 ms 14424 KB Output is correct
13 Correct 5 ms 14428 KB Output is correct
14 Correct 5 ms 14424 KB Output is correct
15 Correct 4 ms 14428 KB Output is correct
16 Correct 7 ms 15192 KB Output is correct
17 Correct 6 ms 14940 KB Output is correct
18 Correct 9 ms 15196 KB Output is correct
19 Correct 7 ms 15192 KB Output is correct
20 Correct 5 ms 14936 KB Output is correct
21 Correct 7 ms 14940 KB Output is correct
22 Correct 6 ms 15196 KB Output is correct
23 Correct 6 ms 15448 KB Output is correct
24 Correct 6 ms 15196 KB Output is correct
25 Correct 4 ms 14424 KB Output is correct
26 Correct 3 ms 14424 KB Output is correct
27 Correct 7 ms 15196 KB Output is correct
28 Correct 7 ms 14964 KB Output is correct
29 Correct 6 ms 14940 KB Output is correct
30 Correct 6 ms 15196 KB Output is correct
31 Correct 7 ms 15196 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14428 KB Output is correct
2 Correct 4 ms 14428 KB Output is correct
3 Correct 5 ms 14392 KB Output is correct
4 Correct 764 ms 84488 KB Output is correct
5 Correct 341 ms 67504 KB Output is correct
6 Correct 199 ms 64304 KB Output is correct
7 Correct 330 ms 84444 KB Output is correct
8 Correct 178 ms 74556 KB Output is correct
9 Correct 4 ms 14428 KB Output is correct
10 Correct 4 ms 14428 KB Output is correct
11 Correct 3 ms 14428 KB Output is correct
12 Correct 4 ms 14428 KB Output is correct
13 Correct 4 ms 14428 KB Output is correct
14 Correct 4 ms 14428 KB Output is correct
15 Correct 4 ms 14428 KB Output is correct
16 Correct 4 ms 14428 KB Output is correct
17 Correct 4 ms 14552 KB Output is correct
18 Correct 5 ms 14428 KB Output is correct
19 Correct 4 ms 14428 KB Output is correct
20 Correct 5 ms 14424 KB Output is correct
21 Correct 5 ms 14428 KB Output is correct
22 Correct 5 ms 14424 KB Output is correct
23 Correct 4 ms 14428 KB Output is correct
24 Correct 7 ms 15192 KB Output is correct
25 Correct 6 ms 14940 KB Output is correct
26 Correct 9 ms 15196 KB Output is correct
27 Correct 7 ms 15192 KB Output is correct
28 Correct 5 ms 14936 KB Output is correct
29 Correct 7 ms 14940 KB Output is correct
30 Correct 6 ms 15196 KB Output is correct
31 Correct 6 ms 15448 KB Output is correct
32 Correct 6 ms 15196 KB Output is correct
33 Correct 4 ms 14424 KB Output is correct
34 Correct 3 ms 14424 KB Output is correct
35 Correct 7 ms 15196 KB Output is correct
36 Correct 7 ms 14964 KB Output is correct
37 Correct 6 ms 14940 KB Output is correct
38 Correct 6 ms 15196 KB Output is correct
39 Correct 7 ms 15196 KB Output is correct
40 Correct 736 ms 88688 KB Output is correct
41 Correct 359 ms 69968 KB Output is correct
42 Correct 442 ms 96180 KB Output is correct
43 Correct 457 ms 95176 KB Output is correct
44 Correct 192 ms 65384 KB Output is correct
45 Correct 299 ms 70460 KB Output is correct
46 Correct 131 ms 35352 KB Output is correct
47 Correct 395 ms 80384 KB Output is correct
48 Correct 359 ms 81200 KB Output is correct