답안 #239521

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
239521 2020-06-16T06:44:49 Z Fischer K개의 묶음 (IZhO14_blocks) C++14
0 / 100
10 ms 640 KB
/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author Miguel Mini
 */

#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <stack>
#define sz(x) (int)x.size()
#define trav(v, x) for (auto v : x)
#define re(x, y, z) for (int x=y; x<z; ++x)
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define set_to(x, v) fill(all(x), v)
#define eb emplace_back
#define lso(x) ((x)&-(x))
#define mset(m ,v) memset(m, v, sizeof(m))
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
using vii = vector<ii>;
const int mod = 1e9 + 7;
const ll inf = 1.e18;
const int maxn = 1e5 + 10;
int a[maxn];
ll dp[maxn][2];

class IZHO_14_blocks {
public:
    void solveOne(istream& in, ostream& out) {
      int n, k;
      in >> n >> k;
      re(i, 0, n) {
        in >> a[i];
      }
      for (int i = 0; i < n; ++i) {
        dp[i][1] = i == 0 ? a[i] : max(0ll + a[i], dp[i-1][1]);
      }
      for (int i = 2; i <= k; ++i) {
        stack<ll> s1({inf});
        stack<ll> s2({inf});
        ll temp = inf;
        for (int j = 0; j < n; ++j) {
          while (!s1.empty() && s1.top() <= a[j]) {
            s1.pop();
            s2.pop();
          }
          s1.push(a[j]);
          s2.push(min(s2.top(), a[j] + temp));
          temp = min(temp, dp[j][(i&1)^1]);
          dp[j][i&1] = s2.top();
        }
      }
      out << dp[n-1][k&1] << endl;
    }

    void solve(istream& in, ostream& out) {
        int testNumber = 1;
        //in >> testNumber;
        re(tc, 1, testNumber+1) {
            //out << "Case #" << tc << ": ";
            solveOne(in, out);
        }
    }
};


int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
	IZHO_14_blocks solver;
	std::istream& in(std::cin);
	std::ostream& out(std::cout);
	solver.solve(in, out);
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 5 ms 384 KB Output is correct
7 Correct 5 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 4 ms 384 KB Output is correct
10 Incorrect 5 ms 512 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 5 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Incorrect 5 ms 384 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 10 ms 640 KB Output isn't correct
2 Halted 0 ms 0 KB -