#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 (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]);
}
if (l == r)
return;
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 time | Memory | Grader output |
---|
Fetching results... |