답안 #535519

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
535519 2022-03-10T12:28:17 Z keta_tsimakuridze Peru (RMI20_peru) C++14
18 / 100
600 ms 8276 KB
#include<bits/stdc++.h>
#include "peru.h"
using namespace std;

#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define endl "\n"

const int N = 2e5 + 5, mod = 1e9 + 7; //!
int t;
void add(int &a, int c) {
	a += c;
	if(a >= mod) a -= mod;
}
int solve(int n, int k, int *x) {
	vector<int> a(n + 1), p(n + 1);
	vector<ll> dp(n + 1);
	for(int i = 0; i < n; i++) a[i + 1] = x[i];
	deque<pii> st;
	multiset<ll> s;
	p[0] = 1;
	for(int i = 1; i <= n - 1; i++) p[i] = (ll)p[i - 1] * 23 % mod;
	int ans = 0;
	for(int i = 1; i <= n; i++) {
		dp[i] = 1e15;
		int mx = 0;
		for(int j = i; j >= max(1, i - k + 1); j--) {
			mx = max(mx, a[j]);
			dp[i] = min(dp[i], mx  + dp[j - 1]);
		}
		/*
		if(st.size() && st.front().s < i - k + 1) {
			pii x = st.front();
			s.erase(s.find(dp[x.s - 1] + a[x.f]));
			st.front().s++; 
			x.s++;
			if(x.s> x.f) st.pop_front();
			else s.insert(dp[x.s - 1] + a[x.f]);
		}
		int l = i;
		while(st.size() && a[st.back().f] < a[i]) {
			l = st.back().s;
			s.erase(s.find(dp[l - 1] + a[st.back().f]));
			st.pop_back();
		}
		st.push_back({i, l}); 
		s.insert(a[i] + dp[l - 1]);
		dp[i] = *s.begin();
		*/
		
		add(ans, (ll)dp[i] % mod * p[n - i] % mod);
	}
	return ans;
}
/*
static int s[N];
int main() {
	int n, k;
	cin >> n >> k;
	for(int i = 0; i < n; i++) cin >> s[i];
	cout << solve(n, k, s);
}
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 593 ms 8160 KB Output is correct
16 Correct 481 ms 8148 KB Output is correct
17 Correct 298 ms 8276 KB Output is correct
18 Correct 332 ms 8148 KB Output is correct
19 Correct 414 ms 8260 KB Output is correct
20 Execution timed out 757 ms 8276 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 593 ms 8160 KB Output is correct
2 Correct 481 ms 8148 KB Output is correct
3 Correct 298 ms 8276 KB Output is correct
4 Correct 332 ms 8148 KB Output is correct
5 Correct 414 ms 8260 KB Output is correct
6 Execution timed out 757 ms 8276 KB Time limit exceeded
7 Halted 0 ms 0 KB -