답안 #1055156

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1055156 2024-08-12T15:00:15 Z vjudge1 메기 농장 (IOI22_fish) C++17
0 / 100
44 ms 15248 KB
#include "fish.h"
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using vi = vector<int>;
using vll = vector<ll>;

struct AIB {
    int n;
    vll  V;
    AIB(int N) : n(N + 2), V(N + 2, 0) {}
    void update(int p, ll v) {
        ++p;
        while(p < n) {
            V[p] = max(V[p], v);
            p += p & -p;
        }
    }

    ll query(int p) {
        ++p;
        ll re = 0;
        if(p < 0) return 0;
        while(p) {
            re = max(re, V[p]);
            p -= p & -p;
        }
        return re;
    }
};

struct maxSuf {
    int n;
    AIB A;
    maxSuf(int N) : n(N), A(N) {}

    void update(int p, ll v) { A.update(n - p - 1, v); }

    ll query(int p) { return A.query(n - p - 1); }
};


ll max_weights(int n, int m, vi X, vi Y, vi W) {
    vll DP0(m, 0), DP1(m, 0), MaTot(n, 0), Ma0(n, 0);
    vector<vi> P(n);
    for(int i = 0; i < m; ++i) {
        P[X[i]].push_back(i);
    }

    AIB MP(n);
    maxSuf MS(n);

    for(int i = 0; i < n; ++i) {
        sort(P[i].begin(), P[i].end(), [&](auto a, auto b) { return Y[a] < Y[b]; });
        if(i > 0) {
            for(auto it : P[i]) {
                DP0[it] = (i > 1 ? MaTot[i - 2] : 0) + W[it];
                DP0[it] = max(DP0[it], W[it] + MS.query(Y[it] + 1));

                MS.update(Y[it], DP0[it]);
                MaTot[i] = max(MaTot[i], DP0[it]);
                Ma0[i] = max(Ma0[i], DP0[it]);
            }
        }
        reverse(P[i].begin(), P[i].end());
        for(auto it : P[i]) {
            DP1[it] = max((i > 1 ? MaTot[i - 2] : 0), (i ? Ma0[i - 1] : 0)) + W[it];
            DP1[it] = max(DP1[it], W[it] + MP.query(Y[it] - 1));

            MP.update(Y[it], DP1[it]);
            MaTot[i] = max(MaTot[i], DP1[it]);
        }
        if(i) {
            MaTot[i] = max(MaTot[i], MaTot[i - 1]);
            Ma0[i] = max(Ma0[i], Ma0[i - 1]);
        }
    }

    ll re = 0;

    for(auto it : P[n - 2]) re = max(re, DP1[it]);
    for(auto it : P[n - 1]) re = max(re, DP0[it]);

    return re;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 10196 KB 1st lines differ - on the 1st token, expected: '40313272768926', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 44 ms 15248 KB 1st lines differ - on the 1st token, expected: '40604614618209', found: '0'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 5724 KB 1st lines differ - on the 1st token, expected: '10082010', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 600 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Incorrect 0 ms 348 KB 1st lines differ - on the 1st token, expected: '216624184325', found: '96377428516'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 600 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Incorrect 0 ms 348 KB 1st lines differ - on the 1st token, expected: '216624184325', found: '96377428516'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 600 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Incorrect 0 ms 348 KB 1st lines differ - on the 1st token, expected: '216624184325', found: '96377428516'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 5724 KB 1st lines differ - on the 1st token, expected: '10082010', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 10196 KB 1st lines differ - on the 1st token, expected: '40313272768926', found: '0'
2 Halted 0 ms 0 KB -