Submission #1297143

#TimeUsernameProblemLanguageResultExecution timeMemory
1297143ThunnusPeru (RMI20_peru)C++20
100 / 100
332 ms52964 KiB
#include "peru.h" #include<bits/stdc++.h> using namespace std; using i64 = long long; //#define int i64 #define vi vector<int> #define vvi vector<vi> #define vb vector<bool> #define se second #define fi first #define pii pair<int, int> #define sz(x) (int)(x).size() const int MOD = 1e9 + 7; const int B = 23; const int MAXN = 25e5 + 5; i64 pw[MAXN]; inline int hashx(int n, vector<i64> &x){ int ret = 0; for(int i = 0; i < n; i++){ //cout << "i: " << i << " x: " << x[i] << "\n"; x[i] %= MOD; i64 val = (x[i] * pw[n - 1 - i]) % MOD; ret = (ret + val) % MOD; } return ret; } int solve(int n, int k, int *s){ pw[0] = 1; for(int i = 1; i <= n; i++){ pw[i] = (pw[i - 1] * B) % MOD; } vector<i64> dp(n); dp[0] = s[0]; deque<int> dq; dq.emplace_back(0); multiset<i64> ms; for(int i = 1; i < n; i++){ dp[i] = dp[i - 1] + s[i]; while(!dq.empty() && s[dq.back()] < s[i]){ if(sz(dq) > 1){ ms.erase(ms.find(dp[dq[sz(dq) - 2]] + s[dq.back()])); } dq.pop_back(); } if(!dq.empty()){ ms.emplace(dp[dq.back()] + s[i]); } dq.emplace_back(i); while(!dq.empty() && dq.front() <= i - k){ if(sz(dq) > 1){ ms.erase(ms.find(dp[dq.front()] + s[dq[1]])); } dq.pop_front(); } dp[i] = min(dp[i], s[dq.front()] + (i >= k ? dp[i - k] : 0ll)); if(!ms.empty()){ dp[i] = min(dp[i], *ms.begin()); } } return hashx(n, dp); } /* signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, k; cin >> n >> k; int s[n]; for(int i = 0; i < n; i++){ cin >> s[i]; } cout << solve(n, k, s) << "\n"; return 0; } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...