답안 #985056

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
985056 2024-05-17T10:07:38 Z GrindMachine Passport (JOI23_passport) C++17
48 / 100
2000 ms 1017736 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});
        for(int j = l+n; j <= r+n; ++j){
            adj[j].pb({ptr,0});
        }

        // 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});   
        }

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

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

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

        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 3 ms 14428 KB Output is correct
2 Correct 3 ms 14428 KB Output is correct
3 Correct 4 ms 14544 KB Output is correct
4 Execution timed out 2079 ms 1017736 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14424 KB Output is correct
2 Correct 3 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 3 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 3 ms 14428 KB Output is correct
8 Correct 4 ms 14428 KB Output is correct
9 Correct 4 ms 14428 KB Output is correct
10 Correct 4 ms 14428 KB Output is correct
11 Correct 8 ms 15024 KB Output is correct
12 Correct 4 ms 14428 KB Output is correct
13 Correct 15 ms 15332 KB Output is correct
14 Correct 13 ms 15244 KB Output is correct
15 Correct 5 ms 14548 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14424 KB Output is correct
2 Correct 3 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 3 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 3 ms 14428 KB Output is correct
8 Correct 4 ms 14428 KB Output is correct
9 Correct 4 ms 14428 KB Output is correct
10 Correct 4 ms 14428 KB Output is correct
11 Correct 8 ms 15024 KB Output is correct
12 Correct 4 ms 14428 KB Output is correct
13 Correct 15 ms 15332 KB Output is correct
14 Correct 13 ms 15244 KB Output is correct
15 Correct 5 ms 14548 KB Output is correct
16 Correct 482 ms 46472 KB Output is correct
17 Correct 12 ms 15452 KB Output is correct
18 Correct 939 ms 62408 KB Output is correct
19 Correct 948 ms 53804 KB Output is correct
20 Correct 7 ms 15192 KB Output is correct
21 Correct 71 ms 19816 KB Output is correct
22 Correct 1018 ms 102464 KB Output is correct
23 Correct 982 ms 68340 KB Output is correct
24 Correct 808 ms 72520 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14424 KB Output is correct
2 Correct 3 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 3 ms 14428 KB Output is correct
6 Correct 4 ms 14428 KB Output is correct
7 Correct 3 ms 14428 KB Output is correct
8 Correct 4 ms 14428 KB Output is correct
9 Correct 4 ms 14428 KB Output is correct
10 Correct 4 ms 14428 KB Output is correct
11 Correct 8 ms 15024 KB Output is correct
12 Correct 4 ms 14428 KB Output is correct
13 Correct 15 ms 15332 KB Output is correct
14 Correct 13 ms 15244 KB Output is correct
15 Correct 5 ms 14548 KB Output is correct
16 Correct 482 ms 46472 KB Output is correct
17 Correct 12 ms 15452 KB Output is correct
18 Correct 939 ms 62408 KB Output is correct
19 Correct 948 ms 53804 KB Output is correct
20 Correct 7 ms 15192 KB Output is correct
21 Correct 71 ms 19816 KB Output is correct
22 Correct 1018 ms 102464 KB Output is correct
23 Correct 982 ms 68340 KB Output is correct
24 Correct 808 ms 72520 KB Output is correct
25 Correct 6 ms 14424 KB Output is correct
26 Correct 8 ms 14428 KB Output is correct
27 Correct 534 ms 48400 KB Output is correct
28 Correct 13 ms 15448 KB Output is correct
29 Correct 7 ms 15196 KB Output is correct
30 Correct 68 ms 19532 KB Output is correct
31 Correct 506 ms 50628 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14428 KB Output is correct
2 Correct 3 ms 14428 KB Output is correct
3 Correct 4 ms 14544 KB Output is correct
4 Execution timed out 2079 ms 1017736 KB Time limit exceeded
5 Halted 0 ms 0 KB -