#include "peru.h"
#include <bits/stdc++.h>
using namespace std;
#ifdef __LOCALTEST
#include "grader.cpp"
#endif // __LOCALTEST
//first subtask
const int MAXLOG = 15;
const int MAXN = 2050;
const int64_t inf = 1e17;
const int64_t mod = 1e9+7;
struct RangeMaximumQuery
{
int n;
int log[MAXN+10];
int sparseTable[MAXLOG+2][MAXN+10];
RangeMaximumQuery(int n)
{
//precompute log array
//!log[i] gives the value of log2(i) rounded down
this->n = n;
log[1] = 0;
for (int i = 2; i <= n; i++)
log[i] = log[i>>1] + 1;
}
void Build(int *arr)
{
//construct sparse table
for (int i = 0; i < n; i++)
sparseTable[0][i] = arr[i];
for (int lg = 1; lg <= MAXLOG; lg++)
{
for (int i = 0; i < n; i++)
{
int jump = (1<<(lg-1));
if (i+jump >= n)
sparseTable[lg][i] = sparseTable[lg-1][i];
else
sparseTable[lg][i] = max(sparseTable[lg-1][i], sparseTable[lg-1][i+jump]);
}
}
}
int Query(int leftQ, int rightQ)
{
//answering query
return max(sparseTable[log[rightQ-leftQ+1]][leftQ],
sparseTable[log[rightQ-leftQ+1]][rightQ-(1<<log[rightQ-leftQ+1])+1]);
}
};
int evaluateAnswer(const int n, int64_t *arr)
{
int64_t ans = 0;
for (int i = 0; i < n; i++)
{
ans = (ans*23 + arr[i])%mod;
}
return ans;
}
int64_t dp1[MAXN+10][MAXN+10];
int64_t dp2[MAXN+10];
int solve(int n, int k, int* v)
{
RangeMaximumQuery *rmq = new RangeMaximumQuery(n);
rmq->Build(v);
for (int i = 0; i < n; i++)
dp2[i] = inf;
dp1[0][0] = v[0];
dp2[0] = v[0];
for (int i = 1; i < n; i++)
{
for (int j = 0; j < min(i+1, k); j++)
{
if (i == j)
dp1[i][j] = (rmq->Query(0, i))%mod;
else
{
dp1[i][j] = (int64_t(rmq->Query(i-j, i)) + dp2[i-j-1])%mod;
}
dp2[i] = min(dp2[i], dp1[i][j])%mod;
}
}
//cout << evaluateAnswer(n, dp2) << endl;
int ans = evaluateAnswer(n, dp2);
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
10964 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
10964 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
10964 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |