QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#408854#149. PeruieeCompile Error//C++141.9kb2024-05-11 09:40:462024-05-11 09:40:46

Judging History

This is a historical verdict posted at 2024-05-11 09:40:46.

  • [2024-09-10 16:45:52]
  • 管理员手动重测本题所有提交记录
  • Verdict: 18
  • Time: 2ms
  • Memory: 14080kb
  • [2024-05-11 09:40:46]
  • Judged
  • [2024-05-11 09:40:46]
  • Submitted

answer

#include "peru.h"
#include <bits/stdc++.h>
using namespace std;
constexpr int N = 2.5e6 + 5, base = 23, mod = 1e9 + 7;
using ll = long long;
int n, k;
int a[N];
ll f[N];
struct info {
    ll mnvf, mnans;
} tr[N << 2];
ll cov[N << 2];
void spread(int u) {
    ll &k = cov[u];
    if (!k) return;
    tr[u * 2].mnans = tr[u * 2].mnvf + k;
    tr[u * 2 + 1].mnans = tr[u * 2 + 1].mnvf + k;
    cov[u * 2] = k, cov[u * 2 + 1] = k;
    k = 0;
}
void pushup(int u) {
    tr[u].mnvf = min(tr[u * 2].mnvf, tr[u * 2 + 1].mnvf);
    tr[u].mnans = min(tr[u * 2].mnans, tr[u * 2 + 1].mnans);
}
void uf(int pos, ll vf, int u = 1, int l = 0, int r = n - 1) {
    if (l == r) {
        tr[u].mnvf = vf;
        tr[u].mnans = vf;
        return;
    }
    int mid = (l + r) / 2;
    if (pos <= mid) uf(pos, vf, u * 2, l, mid);
    else uf(pos, vf, u * 2 + 1, mid + 1, r);
    pushup(u);
}
void um(int ql, int qr, ll vm, int u = 1, int l = 0, int r = n - 1) {
    if (l >= ql && r <= qr) {
        cov[u] = vm;
        tr[u].mnans = tr[u].mnvf + vm;
        return;
    }
    spread(u);
    int mid = (l + r) / 2;
    if (ql <= mid) um(ql, qr, vm, u * 2, l, mid);
    if (qr > mid) um(ql, qr, vm, u * 2 + 1, mid + 1, r);
    pushup(u);
}
int solve(int _n, int _k, int* _v){
    n = _n, k = _k;
    for (int i = 1; i <= n; i++) {
        a[i] = _v[i - 1];
    }
    uf(0, 0);
    stack<int> st;
    for (int i = 1; i <= n; i++) {
        while (st.size() && a[st.top()] <= a[i]) st.pop();
        um(st.size() ? st.top() : 0, i - 1, a[i]);
        f[i] = 1e18;
        int mx = 0;
        for (int j = i - 1; j >= max(0, i - k); j--) {
            mx = max(mx, a[j + 1]);
            f[i] = min(f[i], f[j] + mx);
        }
        uf(i, f[i]);
        st.push(i);
    }
    int sum = 0;
    for (int i = 1; i <= n; i++) {
        sum = (1ll * sum * base % mod + f[i]) % mod;
    }
    return sum;
}

Details

implementer.cpp: In function ‘int main()’:
implementer.cpp:34:13: error: ‘fout’ was not declared in this scope; did you mean ‘out’?
   34 |     fprintf(fout, "%d\n", sol);
      |             ^~~~
      |             out
implementer.cpp: In function ‘char nextch()’:
implementer.cpp:15:31: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   15 |     if (pos == BUF_SIZE) fread(buf, BUF_SIZE, 1, fin), pos = 0;
      |                          ~~~~~^~~~~~~~~~~~~~~~~~~~~~~