Submission #1087611

# Submission time Handle Problem Language Result Execution time Memory
1087611 2024-09-13T02:45:09 Z Seungni Treatment Project (JOI20_treatment) C++17
4 / 100
74 ms 9928 KB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
const ll inf = 0x3f3f3f3f3f3f3f3fLL;

ll N, M, sz;
pair<ll, pair<pii, ll>> arr[100005];
ll seg[200505 * 2];

void update(int pos, ll v) {
    pos += sz;
    seg[pos] = min(seg[pos], v);
    for (; pos > 0; pos >>= 1) seg[pos >> 1] = min(seg[pos], seg[pos ^ 1]);
    return;
}

ll query(int l, int r) {
    r++;
    ll ret = inf;
    for (l += sz, r += sz; l < r; l >>= 1, r >>= 1) {
        if (l & 1) ret = min(ret, seg[l++]);
        if (r & 1) ret = min(ret, seg[--r]);
    }
    return ret;
}

void subtask_1() {
    vector<ll> v;
    v.push_back(0);
    v.push_back(1), v.push_back(N);
    for (int i = 0; i < M; i++) {
        v.push_back(arr[i].second.first.first);
        v.push_back(arr[i].second.first.second);
    }
    
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    
    sz = v.size();
    
    sort(arr, arr + M, [&](pair<ll, pair<pii, ll>> a, pair<ll, pair<pii, ll>> b) {
        return a.second.first.second < b.second.first.second;
    });
    for (int i = 0; i < M; i++) {
        ll L = arr[i].second.first.first, R = arr[i].second.first.second;
        L = lower_bound(v.begin(), v.end(), L) - v.begin();
        R = lower_bound(v.begin(), v.end(), R) - v.begin();
        arr[i].second.first = {L, R};
    }
    
    vector<ll> dp(sz + 5, inf);
    memset(seg, 0x3f, sizeof(seg));
    dp[0] = 0;
    update(0, dp[0]);
    
    for (int i = 0; i < M; i++) {
        ll l = arr[i].second.first.first, r = arr[i].second.first.second, c = arr[i].second.second;
        ll idx = lower_bound(v.begin(), v.end(), v[l] - 1) - v.begin();
        dp[r] = min(dp[r], query(idx, r) + c);
        update(r, dp[r]);
    }
    
    int idx = lower_bound(v.begin(), v.end(), N) - v.begin();
    if (dp[idx] == inf) cout << -1;
    else cout << dp[idx];
    return;
}

void subtask_2() {
    ll ans = inf;
    
    sort(arr, arr + M);
    
    for (int i = 0; i < (1 << M); i++) {
        vector<int> v;
        ll cost = 0;
        for (int j = 0; j < M; j++) {
            if (i & (1 << j)) v.push_back(j), cost += arr[j].second.second;
        }
        
        ll t = 0;
        vector<pii> now;
        now.push_back({1, N});
        
        for (int j: v) {
            vector<pii> nxt;
            ll T = arr[j].first, L = arr[j].second.first.first, R = arr[j].second.first.second;
            for (auto [l, r]: now) {
                l -= T - t, l = max(l, 1LL);
                r += T - t, r = min(r, N);
                if (l < L) nxt.push_back({l, L - 1});
                if (r > R) nxt.push_back({R + 1, r});
            }
            swap(nxt, now);
            t = T;
        }
        
        if (now.empty()) ans = min(ans, cost);
    }
    
    if (ans == inf) cout << -1;
    else cout << ans;
    
    return;
}

void solve() {
    cin >> N >> M;
    
    int sub_task1 = 1, sub_task2 = (M <= 16);
    
    for (int i = 0; i < M; i++) {
        ll T, L, R, C;
        cin >> T >> L >> R >> C;
        if (T != 1) sub_task1 = 0;
        arr[i] = {T, {{L, R}, C}};
    }
    
    if (sub_task1) {
        subtask_1();
        return;
    }
    
    if (sub_task2) {
        subtask_2();
        return;
    }
    
    return;
}

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    while (t--) solve();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 58 ms 9924 KB Output is correct
2 Correct 57 ms 9920 KB Output is correct
3 Correct 53 ms 8652 KB Output is correct
4 Correct 54 ms 8672 KB Output is correct
5 Correct 36 ms 8392 KB Output is correct
6 Correct 38 ms 8232 KB Output is correct
7 Correct 41 ms 8372 KB Output is correct
8 Correct 36 ms 8236 KB Output is correct
9 Correct 42 ms 8392 KB Output is correct
10 Correct 41 ms 8392 KB Output is correct
11 Correct 74 ms 9420 KB Output is correct
12 Correct 74 ms 9420 KB Output is correct
13 Correct 69 ms 9928 KB Output is correct
14 Correct 68 ms 9820 KB Output is correct
15 Correct 71 ms 9928 KB Output is correct
16 Correct 67 ms 9928 KB Output is correct
17 Correct 63 ms 9920 KB Output is correct
18 Correct 73 ms 9416 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 22 ms 348 KB Output is correct
3 Correct 22 ms 344 KB Output is correct
4 Correct 45 ms 348 KB Output is correct
5 Correct 49 ms 348 KB Output is correct
6 Incorrect 32 ms 344 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 22 ms 348 KB Output is correct
3 Correct 22 ms 344 KB Output is correct
4 Correct 45 ms 348 KB Output is correct
5 Correct 49 ms 348 KB Output is correct
6 Incorrect 32 ms 344 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 58 ms 9924 KB Output is correct
2 Correct 57 ms 9920 KB Output is correct
3 Correct 53 ms 8652 KB Output is correct
4 Correct 54 ms 8672 KB Output is correct
5 Correct 36 ms 8392 KB Output is correct
6 Correct 38 ms 8232 KB Output is correct
7 Correct 41 ms 8372 KB Output is correct
8 Correct 36 ms 8236 KB Output is correct
9 Correct 42 ms 8392 KB Output is correct
10 Correct 41 ms 8392 KB Output is correct
11 Correct 74 ms 9420 KB Output is correct
12 Correct 74 ms 9420 KB Output is correct
13 Correct 69 ms 9928 KB Output is correct
14 Correct 68 ms 9820 KB Output is correct
15 Correct 71 ms 9928 KB Output is correct
16 Correct 67 ms 9928 KB Output is correct
17 Correct 63 ms 9920 KB Output is correct
18 Correct 73 ms 9416 KB Output is correct
19 Correct 0 ms 344 KB Output is correct
20 Correct 22 ms 348 KB Output is correct
21 Correct 22 ms 344 KB Output is correct
22 Correct 45 ms 348 KB Output is correct
23 Correct 49 ms 348 KB Output is correct
24 Incorrect 32 ms 344 KB Output isn't correct
25 Halted 0 ms 0 KB -