제출 #108671

#제출 시각아이디문제언어결과실행 시간메모리
108671bibabasK개의 묶음 (IZhO14_blocks)C++14
100 / 100
311 ms248876 KiB
#ifdef LOCAL #define _GLIBCXX_DEBUG #endif #include <bits/stdc++.h> #define ll long long #define vi vector<ll> #define vvi vector<vi> #define all(x) x.begin(), x.end() #define pb push_back ll INF = (ll)1e18; using namespace std; template <class T> istream& operator >>(istream &in, vector<T> &arr) { for (T &cnt : arr) { in >> cnt; } return in; }; void solve() { unsigned int n, k; cin >> n >> k; vvi pref(n + 1, vi(k + 1, INF)); vvi dp(n + 1, vi(k + 1, INF)); vi a(1, INF); vvi kek(n + 1, vi(k + 1, 0)); for (int i = 0; i < n; ++i){ int c; cin >> c; a.pb(c); } deque<int> stak; dp[0][0] = 0; stak.push_back(0); for (int i = 1; i <= n; ++i){ dp[i][1] = a[i]; if (stak.size() != 1) dp[i][1] = max(dp[i][1], a[stak[1]]); for (int j = 1; j <= k; ++j){ kek[stak.size()][j] = dp[stak.back()][j]; } while(a[stak.back()] <= a[i]){ for (int j = 1; j <= k; ++j){ kek[stak.size() - 1][j] = min(kek[stak.size()][j], kek[stak.size() - 1][j]); } stak.pop_back(); } for (int j = 1; j <= k; ++j){ pref[stak.size()][j] = min(pref[stak.size() - 1][j], kek[stak.size()][j] + a[i]); } stak.push_back(i); for (int j = 2; j <= k; ++j){ dp[i][j] = pref[stak.size() - 1][j - 1]; } } cout << dp[n][k]; } int main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #endif solve(); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

blocks.cpp: In function 'void solve()':
blocks.cpp:29:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < n; ++i){
                     ~~^~~
blocks.cpp:36:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i <= n; ++i){
                     ~~^~~~
blocks.cpp:40:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 1; j <= k; ++j){
                         ~~^~~~
blocks.cpp:44:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 1; j <= k; ++j){
                             ~~^~~~
blocks.cpp:49:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 1; j <= k; ++j){
                         ~~^~~~
blocks.cpp:53:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 2; j <= k; ++j){
                         ~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...