제출 #1270997

#제출 시각아이디문제언어결과실행 시간메모리
1270997repmann비밀 (JOI14_secret)C++20
30 / 100
413 ms20456 KiB
#include <bits/stdc++.h>
#include "secret.h"
using namespace std;
int N, K;
int ST[2025];
int DP[2025][2025];
//int Secret(int x, int y)
//{
//  cout << "Secret: " << x << ' ' << y << '\n';
//  int ret;
//  cin >> ret;
//  return ret;
//}
void Init(int n, int *A)
{
  N = n;
  K = 1;
  while(K < N) K <<= 1;
  for(int i = 1; i < (N + K); i++)
  {
    ST[i] = -1;
    for(int j = 1; j < (N + K); j++) DP[i][j] = -1;
  }
  for(int i = 0; i < N; i++) ST[i + K] = A[i];
  for(int i = K - 1; i; i--)
  {
    if((ST[i << 1] > 0) && (ST[i << 1 | 1] > 0)) ST[i] = Secret(ST[i << 1], ST[i << 1 | 1]);
    else ST[i] = max(ST[i << 1], ST[i << 1 | 1]);
  }
  return;
}
int Get(int L, int R, int i = 1, int LC = 1, int RC = K)
{
  if((L > RC) || (LC > R)) return -1;
  if((L <= LC) && (RC <= R)) return ST[i];
  int S = (LC + RC) >> 1;
  int l = Get(L, R, i << 1, LC, S);
  int r = Get(L, R, i << 1 | 1, S + 1, RC);
  if((l < 0) || (r < 0)) return max(l, r);
  return Secret(l, r);
}
int Query(int L, int R)
{
  return Get(L + 1, R + 1);
}
//int main()
//{
//  int n, q, l, r;
//  cin >> n;
//  int a[n];
//  for(int i = 0; i < n; i++) cin >> a[i];
//  Init(n, a);
//  cin >> q;
//  while(q--) {cin >> l >> r; cout << Query(l, r) << '\n';}
//
//  return 0;
//}
#Verdict Execution timeMemoryGrader output
Fetching results...