제출 #1138257

#제출 시각아이디문제언어결과실행 시간메모리
1138257AbdullahIshfaq밀림 점프 (APIO21_jumps)C++20
컴파일 에러
0 ms0 KiB
// #include "jumps.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 2e5+5, LOG = 18; int N, H[MAXN], L[MAXN][LOG], R[MAXN][LOG], T[MAXN][LOG], mx; stack <int> st; void init(int n, vector<int> h) { N = n; H[0] = H[N+1] = N+1; for (int i=1;i<=N;i++) { H[i] = h[i-1]; } st.push(0); R[0][0] = R[N+1][0] = N+1; for (int i=1;i<=N+1;i++) { while (H[st.top()] < H[i]) { R[st.top()][0] = i; st.pop(); } L[i][0] = st.top(); st.push(i); } for (int i=0;i<=N+1;i++) { if (H[L[i][0]] > H[R[i][0]]) { T[i][0] = L[i][0]; } else { T[i][0] = R[i][0]; } } for (int i=1;i<LOG;i++) { for (int j=0;j<=N+1;j++) { T[j][i] = T[T[j][i-1]][i-1]; L[j][i] = L[L[j][i-1]][i-1]; R[j][i] = R[R[j][i-1]][i-1]; } } } int minimum_jumps(int A, int B, int C, int D) { A++; B++; C++; D++; mx = B; for (int i=LOG-1;i>=0;i--) { if (R[mx][i] < C) { mx = R[mx][i]; } } mx = R[mx][0]; if (mx > D) { return -1; } for (int i=LOG-1;i>=0;i--) { if (H[L[B][i]] <= H[mx] && L[B][i] >= A) { B = L[B][i]; } } if (L[B][0] >= A && R[L[B][0]][0] <= D) { return 1; } int ans = 0; for (int i=LOG-1;i>=0;i--) { if (H[T[B][i]] <= H[mx]) { ans += 1<<i; B = T[B][i]; } } if (R[B][0] == mx) { return ans+1; } if (R[L[B][0]][0] <= D) { return ans+2; } for (int i=LOG-1;i>=0;i--) { if (R[B][i] <= mx) { ans += 1<<i; B = R[B][i]; } } return ans; } int main() { int N, Q; assert(2 == scanf("%d %d", &N, &Q)); std::vector<int> H(N); for (int i = 0; i < N; ++i) { assert(1 == scanf("%d", &H[i])); } init(N, H); for (int i = 0; i < Q; ++i) { int A, B, C, D; assert(4 == scanf("%d %d %d %d", &A, &B, &C, &D)); printf("%d\n", minimum_jumps(A, B, C, D)); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cc36v192.o: in function `main':
stub.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccfDN6fU.o:jumps.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status