답안 #570969

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
570969 2022-05-31T20:01:08 Z four_specks 비밀 (JOI14_secret) C++17
100 / 100
456 ms 4492 KB
#include "secret.h"

#include <bits/stdc++.h>

using namespace std;

inline namespace ns
{
    template <typename T, typename Op>
    struct SRQ
    {
        explicit SRQ(const vector<T> &vec, Op _op = Op())
            : n((int)vec.size()), table(__lg(n) + 1, vector<T>(n)), op(_op)
        {
            table[0] = vec;
            for (int x = 1; x < (int)table.size(); x++)
            {
                int j = 1 << x;
                for (int i = j; i < n; i += j << 1)
                {
                    table[x][i - 1] = vec[i - 1];
                    for (int l = i - 2, r = i - j; l >= r; l--)
                        table[x][l] = op(vec[l], table[x][l + 1]);
                    table[x][i] = vec[i];
                    for (int l = i + 1, r = min(n, i + j); l < r; l++)
                        table[x][l] = op(table[x][l - 1], vec[l]);
                }
            }
        }

        T query(int l, int r) const
        {
            assert(l < r);

            --r;
            if (l == r)
                return table[0][l];
            int x = __lg(l ^ r);
            return op(table[x][l], table[x][r]);
        }

    private:
        int n;

        vector<vector<T>> table;

        Op op;
    };

} // namespace ns

namespace
{
    SRQ<int, decltype(&Secret)> *srq;
}

void Init(int N, int A[])
{
    static SRQ _srq(vector(A, A + N), Secret);
    srq = &_srq;
}

int Query(int L, int R) { return srq->query(L, R + 1); }
# 결과 실행 시간 메모리 Grader output
1 Correct 122 ms 2288 KB Output is correct - number of calls to Secret by Init = 3578, maximum number of calls to Secret by Query = 1
2 Correct 125 ms 2292 KB Output is correct - number of calls to Secret by Init = 3586, maximum number of calls to Secret by Query = 1
3 Correct 145 ms 2328 KB Output is correct - number of calls to Secret by Init = 4097, maximum number of calls to Secret by Query = 1
4 Correct 434 ms 4428 KB Output is correct - number of calls to Secret by Init = 7979, maximum number of calls to Secret by Query = 1
5 Correct 444 ms 4320 KB Output is correct - number of calls to Secret by Init = 7986, maximum number of calls to Secret by Query = 1
6 Correct 430 ms 4304 KB Output is correct - number of calls to Secret by Init = 7986, maximum number of calls to Secret by Query = 1
7 Correct 440 ms 4492 KB Output is correct - number of calls to Secret by Init = 7986, maximum number of calls to Secret by Query = 1
8 Correct 442 ms 4308 KB Output is correct - number of calls to Secret by Init = 7986, maximum number of calls to Secret by Query = 1
9 Correct 456 ms 4472 KB Output is correct - number of calls to Secret by Init = 7986, maximum number of calls to Secret by Query = 1
10 Correct 442 ms 4300 KB Output is correct - number of calls to Secret by Init = 7986, maximum number of calls to Secret by Query = 1