Submission #366647

#TimeUsernameProblemLanguageResultExecution timeMemory
366647idk321비밀 (JOI14_secret)C++11
6 / 100
9385 ms43560 KiB

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#include "secret.h"


const int N = 1000;
int* ar;
vector<int> need[N][N];

void cost(int a, int b)
{
    if (a == b)
    {
        need[a][b].push_back(ar[a]);
        return;
    } else if (a == b - 1)
    {
        need[a][a].push_back(ar[a]);
        need[b][b].push_back(ar[b]);
        need[a][b].push_back(ar[a]);
        need[a][b].push_back(ar[b]);
        return;
    } else if (b - a < 0) return;
    int mid = (a + b) / 2;
    int cur = ar[mid];
    need[mid][mid].push_back(cur);
    for (int i = mid - 1; i >= a; i--)
    {
        cur = Secret(ar[i], cur);
        need[i][mid].push_back(cur);
    }
    cur = ar[mid + 1];
    need[mid + 1][mid + 1].push_back(cur);
    for (int i = mid + 2; i <= b; i++)
    {
        cur = Secret(cur, ar[i]);
        need[mid + 1][i].push_back(cur);
    }
    for (int i = mid; i >= a; i--)
    {
        for (int j = mid + 1; j <= b; j++)
        {
            need[i][j].push_back(need[i][mid][0]);
            need[i][j].push_back(need[mid + 1][j][0]);

        }
    }

    cost(a, mid - 1);
    cost(mid + 2, b);
}

/*
int main()
{

} */


void Init(int n, int A[])
{
    ar = A;
    cost(0, n - 1);
}

int Query(int l, int r)
{
    int actual = ar[l];
    for (int i = l + 1; i <= r; i++) actual = Secret(actual, ar[i]);
    if (need[l][r].size() == 1) return need[l][r][0];
    int cur = Secret(need[l][r][0], need[l][r][1]);
    return cur;
}

#Verdict Execution timeMemoryGrader output
Fetching results...