# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
635757 |
2022-08-26T19:00:29 Z |
martin_nedev |
Peru (RMI20_peru) |
C++14 |
|
2 ms |
456 KB |
#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 dp[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++)
dp[i] = inf;
dp[0] = v[0];
for (int i = 1; i < n; i++)
{
int down = max(0, i-k+1);
for (int j = i; j >= down; j--)
{
if (j == 0)
dp[i] = rmq->Query(j, i);
else
dp[i] = min(dp[j-1], int64_t(rmq->Query(j, i)));
}
}
//cout << evaluateAnswer(n, dp) << endl;
int ans = evaluateAnswer(n, dp);
return ans;
}
/*
8 3
3 2 9 8 7 11 3 4
*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
456 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
456 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
456 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |