제출 #720113

#제출 시각아이디문제언어결과실행 시간메모리
720113CyanmondPilot (NOI19_pilot)C++17
89 / 100
1086 ms74800 KiB
#include <bits/stdc++.h>

using i64 = long long;

i64 c2(i64 x) {
    return x * (x + 1) / 2;
}

void solve() {
    int N, Q;
    std::cin >> N >> Q;
    std::vector<int> H(N), Y(Q);
    for (auto &e : H) std::cin >> e;
    for (auto &e : Y) std::cin >> e;
    std::vector<std::pair<int, int>> queries(Q);
    for (int i = 0; i < Q; ++i) queries[i] = {Y[i], i};
    std::sort(queries.begin(), queries.end());
    std::vector<std::pair<int, int>> mountains(N);
    for (int i = 0; i < N; ++i) mountains[i] = {H[i], i};
    std::sort(mountains.begin(), mountains.end());

    std::set<int> s;
    s.insert(-1);
    int j = 0;
    for (int i = 0; i < N; ++i) s.insert(--s.end(), i);
    s.insert(N);
    std::vector<i64> answer(Q);
    i64 countFlights = 0;
    for (int i = 0; i < N; ++i) {
        while (j != Q and queries[j].first < mountains[i].first) {
            answer[queries[j].second] = countFlights;
            ++j;
        }
        auto itr = s.lower_bound(mountains[i].second);
        auto itrL = itr;
        --itrL;
        auto itrR = itr;
        ++itrR;
        countFlights -= c2(*itrR - *itr - 1);
        countFlights -= c2(*itr - *itrL - 1);
        countFlights += c2(*itrR - *itrL - 1);
        s.erase(itr);
    }
    while (j != Q) {
        answer[queries[j].second] = countFlights;
        ++j;
    }
    for (const auto e : answer) std::cout << e << '\n';
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    solve();
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...