답안 #959723

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
959723 2024-04-09T01:04:58 Z VinhLuu Passport (JOI23_passport) C++17
48 / 100
350 ms 142656 KB
#include <bits/stdc++.h>
//#define int long long
#define ll long long
#define fi first
#define se second
#define pb push_back
#define all(lmao) lmao.begin(), lmao.end()

using namespace std;

typedef pair<int,int> pii;
typedef tuple<int,int,int> tp;
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
const int oo = 1e8;

int n, L[N], R[N], h[N << 2], id[N], f[N << 2];
vector<pii> p[N << 2];

void build(int i,int l,int r){
    if(l == r){
        id[l] = i;
        h[i] = 1;

        return;
    }
    int mid = (l + r) / 2;
    build(i << 1, l, mid);
    build(i << 1|1, mid + 1, r);
    p[i << 1].pb({i, 0});
    p[i << 1|1].pb({i, 0});
}

void update(int i,int l,int r,int u,int v,int x){
    if(l > r || l > v || r < u) return;
    if(u <= l && r <= v){
        p[i].pb({id[x], 1});
        return;
    }
    int mid = (l + r) / 2;
    update(i << 1, l, mid, u, v, x);
    update(i << 1|1, mid + 1, r, u, v, x);
}

int d[N][5];

void cal(int u,int j){
    for(int i = 1; i <= 4 * n; i ++) d[i][j] = oo;
    d[id[u]][j] = 0;
    queue<int> q; q.push(id[u]);
    while(!q.empty()){
        int u = q.front();
        q.pop();
        for(auto [v, w] : p[u]) if(d[u][j] + w < d[v][j]){
            d[v][j] = d[u][j] + w;
            q.push(v);
        }
    }
}

signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    #define task "v"
    if(fopen(task ".inp","r")){
        freopen(task ".inp","r",stdin);
        freopen(task ".out","w",stdout);
    }

    cin >> n;
    build(1, 1, n);
    for(int i = 1; i <= n; i ++){
        cin >> L[i] >> R[i];
        update(1, 1, n, L[i], R[i], i);
    }
    cal(1, 0);
    cal(n, 1);
    priority_queue<pii, vector<pii>, greater<pii>>pq;
    for(int i = 1; i <= 4 * n; i ++){
        if(id[1] == i || id[n] == i) f[i] = d[i][1] + d[i][0];
        else f[i] = d[i][1] + d[i][0] - h[i];
        pq.push({f[i], i});
    }
    while(!pq.empty()){
        int w = pq.top().fi;
        int u = pq.top().se;
        pq.pop();
        if(w > f[u]) continue;
        for(auto [v, g] : p[u]) if(w + g < f[v]) pq.push({f[v] = w + g, v});
    }
    int q;
    cin >> q;
    while(q--){
        int x; cin >> x;
        cout << (f[id[x]] >= oo ? -1 : f[id[x]]) << "\n";
    }
}

Compilation message

passport.cpp: In function 'int main()':
passport.cpp:66:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         freopen(task ".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
passport.cpp:67:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |         freopen(task ".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 24924 KB Output is correct
2 Correct 6 ms 25088 KB Output is correct
3 Correct 5 ms 24924 KB Output is correct
4 Runtime error 350 ms 142656 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 24920 KB Output is correct
2 Correct 5 ms 24924 KB Output is correct
3 Correct 5 ms 25084 KB Output is correct
4 Correct 6 ms 24924 KB Output is correct
5 Correct 7 ms 24924 KB Output is correct
6 Correct 7 ms 25024 KB Output is correct
7 Correct 5 ms 24924 KB Output is correct
8 Correct 10 ms 24920 KB Output is correct
9 Correct 6 ms 24924 KB Output is correct
10 Correct 6 ms 24924 KB Output is correct
11 Correct 7 ms 24920 KB Output is correct
12 Correct 7 ms 24924 KB Output is correct
13 Correct 5 ms 25180 KB Output is correct
14 Correct 5 ms 25180 KB Output is correct
15 Correct 8 ms 24924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 24920 KB Output is correct
2 Correct 5 ms 24924 KB Output is correct
3 Correct 5 ms 25084 KB Output is correct
4 Correct 6 ms 24924 KB Output is correct
5 Correct 7 ms 24924 KB Output is correct
6 Correct 7 ms 25024 KB Output is correct
7 Correct 5 ms 24924 KB Output is correct
8 Correct 10 ms 24920 KB Output is correct
9 Correct 6 ms 24924 KB Output is correct
10 Correct 6 ms 24924 KB Output is correct
11 Correct 7 ms 24920 KB Output is correct
12 Correct 7 ms 24924 KB Output is correct
13 Correct 5 ms 25180 KB Output is correct
14 Correct 5 ms 25180 KB Output is correct
15 Correct 8 ms 24924 KB Output is correct
16 Correct 9 ms 27740 KB Output is correct
17 Correct 10 ms 27580 KB Output is correct
18 Correct 11 ms 27996 KB Output is correct
19 Correct 9 ms 27996 KB Output is correct
20 Correct 7 ms 27484 KB Output is correct
21 Correct 8 ms 27740 KB Output is correct
22 Correct 8 ms 27480 KB Output is correct
23 Correct 9 ms 27740 KB Output is correct
24 Correct 8 ms 27740 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 24920 KB Output is correct
2 Correct 5 ms 24924 KB Output is correct
3 Correct 5 ms 25084 KB Output is correct
4 Correct 6 ms 24924 KB Output is correct
5 Correct 7 ms 24924 KB Output is correct
6 Correct 7 ms 25024 KB Output is correct
7 Correct 5 ms 24924 KB Output is correct
8 Correct 10 ms 24920 KB Output is correct
9 Correct 6 ms 24924 KB Output is correct
10 Correct 6 ms 24924 KB Output is correct
11 Correct 7 ms 24920 KB Output is correct
12 Correct 7 ms 24924 KB Output is correct
13 Correct 5 ms 25180 KB Output is correct
14 Correct 5 ms 25180 KB Output is correct
15 Correct 8 ms 24924 KB Output is correct
16 Correct 9 ms 27740 KB Output is correct
17 Correct 10 ms 27580 KB Output is correct
18 Correct 11 ms 27996 KB Output is correct
19 Correct 9 ms 27996 KB Output is correct
20 Correct 7 ms 27484 KB Output is correct
21 Correct 8 ms 27740 KB Output is correct
22 Correct 8 ms 27480 KB Output is correct
23 Correct 9 ms 27740 KB Output is correct
24 Correct 8 ms 27740 KB Output is correct
25 Correct 5 ms 24924 KB Output is correct
26 Correct 6 ms 25052 KB Output is correct
27 Correct 9 ms 27740 KB Output is correct
28 Correct 12 ms 27740 KB Output is correct
29 Correct 8 ms 27740 KB Output is correct
30 Correct 8 ms 27740 KB Output is correct
31 Correct 8 ms 27736 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 24924 KB Output is correct
2 Correct 6 ms 25088 KB Output is correct
3 Correct 5 ms 24924 KB Output is correct
4 Runtime error 350 ms 142656 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -