Submission #366648

# Submission time Handle Problem Language Result Execution time Memory
366648 2021-02-14T20:28:32 Z idk321 Secret (JOI14_secret) C++11
100 / 100
567 ms 43500 KB
#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)
{

    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 time Memory Grader output
1 Correct 171 ms 29932 KB Output is correct - number of calls to Secret by Init = 3084, maximum number of calls to Secret by Query = 1
2 Correct 171 ms 30060 KB Output is correct - number of calls to Secret by Init = 3092, maximum number of calls to Secret by Query = 1
3 Correct 180 ms 30060 KB Output is correct - number of calls to Secret by Init = 3100, maximum number of calls to Secret by Query = 1
4 Correct 567 ms 43500 KB Output is correct - number of calls to Secret by Init = 6988, maximum number of calls to Secret by Query = 1
5 Correct 564 ms 43500 KB Output is correct - number of calls to Secret by Init = 6996, maximum number of calls to Secret by Query = 1
6 Correct 558 ms 43500 KB Output is correct - number of calls to Secret by Init = 6996, maximum number of calls to Secret by Query = 1
7 Correct 564 ms 43500 KB Output is correct - number of calls to Secret by Init = 6996, maximum number of calls to Secret by Query = 1
8 Correct 566 ms 43408 KB Output is correct - number of calls to Secret by Init = 6996, maximum number of calls to Secret by Query = 1
9 Correct 563 ms 43500 KB Output is correct - number of calls to Secret by Init = 6996, maximum number of calls to Secret by Query = 1
10 Correct 565 ms 43500 KB Output is correct - number of calls to Secret by Init = 6996, maximum number of calls to Secret by Query = 1