제출 #1157623

#제출 시각아이디문제언어결과실행 시간메모리
1157623tvgk비밀 (JOI14_secret)C++20
0 / 100
344 ms4444 KiB
#include "secret.h"
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 1e3 + 7;

ll sum[15][mxN], a[mxN], n;

void DvC(int l, int r, int tt, int lv)
{
    if (l == r)
        return;

    if (tt == 1)
    {
        sum[lv][l] = a[l];
        for (int i = l + 1; i <= r; i++)
            sum[lv][i] = Secret(sum[lv][i - 1], a[i]);
    }
    if (tt == 2)
    {
        sum[lv][r] = a[r];
        for (int i = r - 1; i >= l; i--)
            sum[lv][i] = Secret(a[i], sum[lv][i + 1]);
    }

    int mid = (l + r) / 2;
    DvC(l, mid, 2, lv + 1);
    DvC(mid + 1, r, 1, lv + 1);
}

void Init(int N, int A[])
{
    n = N;
    for (int i = 1; i <= n; i++)
        a[i] = A[i - 1];

    DvC(1, n, 0, 0);
}

int Binary(int l, int r, int u, int v, int lv)
{
    if (l > v || u > r)
        return 0;
    if (l == r)
        return a[l];

    int mid = (l + r) / 2;
    if (u <= mid && mid < v)
        return Secret(sum[lv][u], sum[lv][v]);
    return Binary(l, mid, u, v, lv + 1) + Binary(mid + 1, r, u, v, lv + 1);
}

int Query(int l, int r)
{
    return Binary(1, n, l + 1, r + 1, 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...