#include <bits/stdc++.h>
#include "peru.h"
using namespace std;
//#define int long long
//#define INT64_MAX INT32_MAX
const int MOD=1e9+7;
//Hatayı bul (bir ara)
int mod_expo(int a, int e) {
if(e==0) return 1;
if(e==1) return a;
int val=mod_expo(a/2, e);
int extra;
a%2==1 ? extra=a : extra=1;
return (((val*val) % MOD)*extra) % MOD;
}
int32_t solve(int32_t n, int32_t k, int32_t* arr) {
/*int n, k;
cin >> n >> k;*/
long long exponents[n];
exponents[0]=1;
for(int i=1; i<n; ++i) exponents[i]=(exponents[i-1]*23) % MOD;
/*int arr[n];
for(int i=0; i<n; ++i) cin >> arr[i];*/
vector<vector<long long>> dp(n, vector<long long>(k, INT32_MAX));
dp[0][0]=arr[0];
for(int j=1; j<k; ++j) {
dp[0][j]=max((int) dp[0][j-1], arr[j]);
}
for(int i=1; i<n; ++i) {
int st_val=INT32_MAX;
for(int j=0; j<k; ++j) {
if(i-1-j<0) break;
st_val=min(st_val, (int) dp[i-1-j][j]);
}
int add=arr[i];
for(int j=0; j<k; ++j) {
if(i+j>=n) break;
add=max(add, arr[i+j]);
dp[i][j]=st_val+add;
}
}
/*for(int i=0; i<n; ++i) {
for(int j=0; j<k; ++j) {
cout << dp[i][j] << " ";
}
cout << endl;
}*/
long long ans[n];
fill(ans, ans+n, INT32_MAX);
int mod_ans=0;
for(int i=0; i<n; ++i) {
for(int j=0; j<k; ++j) {
if(i-j<0) break;
ans[i]=min(ans[i], dp[i-j][j]);
}
}
for(int i=0; i<n; ++i) {
mod_ans+=(ans[i]*exponents[n-i-1])%MOD;
while(mod_ans>=MOD) mod_ans-=MOD;
}
return mod_ans;
}
/*int main() {
int n, k;
cin >> n >> k;
int arr[n];
for(int i=0; i<n; ++i) cin >> arr[i];
cout << solve(n, k, arr);
return 0;
}*/
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |