Submission #55394

# Submission time Handle Problem Language Result Execution time Memory
55394 2018-07-07T06:54:33 Z red1108 Secret (JOI14_secret) C++17
100 / 100
675 ms 4780 KB
#include <stdio.h>
#include "secret.h"
#include <algorithm>
#include <stdlib.h>
using namespace std;
int si=1,h=1;
int dp[20][2000];
int input[2000];
int secret(int x, int y)
{
    if(x==-1) return y;
    else if(y==-1) return x;
    return Secret(x, y);
}
void fillup(int st,int l, int r)
{
    int mid, i;
    if(st>=10) return ;
    mid=(r+l-1)/2;
    for(i=mid;i>=l;i--)
    {
        if(i==mid) {dp[st][i]=input[i];continue;}
        dp[st][i]=secret(input[i],dp[st][i+1]);
    }
    mid=(r+l+1)/2;
    for(i=mid;i<=r;i++)
    {
        if(i==mid) {dp[st][i]=input[i];continue;}
        dp[st][i]=secret(dp[st][i-1],input[i]);
    }
    fillup(st+1, l, (l+r)/2);
    fillup(st+1, (l+r)/2+1, r);
}
void Init(int N, int A[])
{
    int i,j;
    while(si<N) {si*=2;h++;}
    for(i=N;i>=1;i--)
    {
        input[i]=A[i-1];
    }
    for(i=N+1;i<=si;i++) input[i]=-1;
    for(i=1;i<=h+1;i++)
    {
        for(j=1;j<=N*2;j++)
        {
            dp[i][j]=-1;
        }
    }
    fillup(1,1,si);
}
int query(int x,int st,int l, int r, int s, int e)
{
    if(l+r<s*2) return query(x*2+1,st+1,(l+r)/2+1, r, s, e);
    else if(l+r>e*2) return query(x*2,st+1, l, (l+r)/2, s, e);
    else
    {
        return secret(dp[st][s],dp[st][e]);
    }
}
int Query(int L, int R)
{
    L++;
    R++;
    if(L+1==R) return secret(input[L],input[R]);
    else if(L==R) return input[L];
    return query(1,1,1,si,L, R);
}
# Verdict Execution time Memory Grader output
1 Correct 180 ms 2424 KB Output is correct - number of calls to Secret by Init = 3578, maximum number of calls to Secret by Query = 1
2 Correct 184 ms 2496 KB Output is correct - number of calls to Secret by Init = 3586, maximum number of calls to Secret by Query = 1
3 Correct 204 ms 2696 KB Output is correct - number of calls to Secret by Init = 4097, maximum number of calls to Secret by Query = 1
4 Correct 647 ms 4632 KB Output is correct - number of calls to Secret by Init = 7991, maximum number of calls to Secret by Query = 1
5 Correct 628 ms 4632 KB Output is correct - number of calls to Secret by Init = 8000, maximum number of calls to Secret by Query = 1
6 Correct 654 ms 4704 KB Output is correct - number of calls to Secret by Init = 8000, maximum number of calls to Secret by Query = 1
7 Correct 675 ms 4704 KB Output is correct - number of calls to Secret by Init = 8000, maximum number of calls to Secret by Query = 1
8 Correct 624 ms 4704 KB Output is correct - number of calls to Secret by Init = 8000, maximum number of calls to Secret by Query = 1
9 Correct 608 ms 4704 KB Output is correct - number of calls to Secret by Init = 8000, maximum number of calls to Secret by Query = 1
10 Correct 664 ms 4780 KB Output is correct - number of calls to Secret by Init = 8000, maximum number of calls to Secret by Query = 1