제출 #1307127

#제출 시각아이디문제언어결과실행 시간메모리
1307127fafnir장애물 (IOI25_obstacles)C++20
24 / 100
89 ms8972 KiB
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 200'000;
int T[NMAX];
int H[NMAX];

// In subtask 2, FOV is prefix sum whether a column contains a FOV cell or not
int FOV[NMAX];

int N, M;
int ST;

void initialize(std::vector<int> lT, std::vector<int> lH) {
    copy(lT.begin(), lT.end(), T);
    copy(lH.begin(), lH.end(), H);

    N = lT.size();
    M = lH.size();

    if (N == 1) {
        ST = 1;
        FOV[0] = T[0] > H[0];
        for (int i = 1; i < M; ++i) {
            FOV[i] = FOV[i-1] + (T[0] > H[i]);
        }
    // Subtask 2
    } else {
        ST = 2;
        for (int j = 0; j < M; ++j) {
            int idx = int(upper_bound(T, T + N, H[j]) - T);
            FOV[j] = idx != N;
            if (j > 0) {
                FOV[j] += FOV[j-1];
            }
        }

    }
}

bool can_reach(int L, int R, int S, int D) {
    if (S > D) {swap(S,D);}

    if (D <= R && S >= L) {


        if (ST == 2) {
            if (T[0] <= max(H[S], H[D])) {return false;}
        }

        int fov_cells = FOV[D] - (S != 0 ? FOV[S-1] : 0);
        return (D - S + 1) == (fov_cells); 
    }

    return false;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...