Submission #672807

# Submission time Handle Problem Language Result Execution time Memory
672807 2022-12-18T08:37:33 Z radal The short shank; Redemption (BOI21_prison) C++17
80 / 100
2000 ms 303332 KB
// In the name of God
#pragma GCC optimize("Ofast", "unroll-loops")
 
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define mp make_pair
typedef long long ll;
const int N = 2e6 + 5, M = 4194310;
int n, D, T;
int t[N], L[N];
bool vis[N];
vector<int> vec[M];
int seg[M], mx[M], lz[M];
 
void shift(int v, int tl, int tr) {
    mx[v] += lz[v];
    if (tl < tr) {
        lz[v << 1] += lz[v];
        lz[v << 1 | 1] += lz[v];
    }
    lz[v] = 0;
}
 
void upd(int l, int r, int val, int v = 1, int tl = 0, int tr = n - 1) {
    shift(v, tl, tr);
    if (l > tr || r < tl)
        return;
    if (tl >= l && tr <= r) {
        lz[v] += val;
        shift(v, tl, tr);
        return;
    }
    int mid = (tl + tr) >> 1;
    upd(l, r, val, v << 1, tl, mid);
    upd(l, r, val, v << 1 | 1, mid + 1, tr);
    mx[v] = max(mx[v << 1], mx[v << 1 | 1]);
    if (mx[v] == mx[v << 1])
        seg[v] = seg[v << 1];
    else
        seg[v] = seg[v << 1 | 1];
}
void add(int i, int r, int v = 1, int tl = 0, int tr = n - 1) {
    if (tl == tr && tl == i) {
        vec[v].pb(r);
        return;
    }
    int mid = (tl + tr) >> 1;
    if (i <= mid)
        add(i, r, v << 1, tl, mid);
    else
        add(i, r, v << 1 | 1, mid + 1, tr);
}
void buildSeg(int v = 1, int tl = 0, int tr = n - 1) {
    seg[v] = tl;
    if (tl == tr)
        return;
    int mid = (tl + tr) >> 1;
    buildSeg(v << 1, tl, mid);
    buildSeg(v << 1 | 1, mid + 1, tr);
}
 
void build(int v = 1, int tl = 0, int tr = n - 1) {
    if (tl == tr) {
        sort(vec[v].begin(), vec[v].end());
        vec[v].shrink_to_fit();
        return;
    }
    int mid = (tl + tr) >> 1;
    build(v << 1, tl, mid);
    build(v << 1 | 1, mid + 1, tr);
    int l = 0, r = 0;
    int lc = v << 1, rc = v << 1 | 1;
    while (l < (int)vec[lc].size() && vec[lc][l] < tr)
        l++;
    while (r < (int)vec[rc].size() && vec[rc][r] < tr)
        r++;
    while (l < (int)vec[lc].size() && r < (int)vec[rc].size()) {
        if (vec[lc][l] <= vec[rc][r]) {
            vec[v].pb(vec[lc][l++]);
            l++;
        }
        else
            vec[v].pb(vec[rc][r++]);
    }
    while (l < (int)vec[lc].size())
        vec[v].pb(vec[lc][l++]);
    while (r < (int)vec[rc].size())
        vec[v].pb(vec[rc][r++]);
    //vec[v].shrink_to_fit();
}
void rem(int r, int v = 1, int tl = 0, int tr = n - 1) {
    if (tr <= r) {
        while (!vec[v].empty() && vec[v].back() >= r) {
            int u = vec[v].back();
            vec[v].pop_back();
            if (!vis[u]) {
                upd(L[u], u, -1);
                vis[u] = true;
            }
        }
        vec[v].shrink_to_fit();
        return;
    }
    int mid = (tl + tr) >> 1;
    rem(r, v << 1, tl, mid);
    if (r > mid)
        rem(r, v << 1 | 1, mid + 1, tr);
}
 
 
void solve() {
    cin >> n >> D >> T;
    for (int i = 0; i < n; i++)
        cin >> t[i];
 
    vector<int> st;
    int ans = 0;
    buildSeg();
    for (int i = 0; i < n; i++) {
        while (!st.empty() && (t[st.back()] >= t[i] || t[st.back()] + i - st.back() > T))
            st.pop_back();
        if (!st.empty() && t[i] > T) {
            // st.top(), i - 1
            L[i - 1] = st.back();
            add(st.back(), i - 1);
            upd(st.back(), i - 1, 1);
        }
        else
            ans += t[i] > T;
        st.pb(i);
    }
    build();
    while (D--) {
        shift(1, 0, n - 1);
        int i = seg[1];
        ans += mx[1];
        rem(i);
    }
    cout << n - ans << '\n';
}
 
int32_t main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    solve();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 52 ms 98844 KB Output is correct
2 Correct 54 ms 98752 KB Output is correct
3 Correct 55 ms 98860 KB Output is correct
4 Correct 52 ms 98772 KB Output is correct
5 Correct 53 ms 98880 KB Output is correct
6 Correct 54 ms 98872 KB Output is correct
7 Correct 52 ms 98780 KB Output is correct
8 Correct 56 ms 98816 KB Output is correct
9 Correct 55 ms 98764 KB Output is correct
10 Correct 56 ms 98784 KB Output is correct
11 Correct 54 ms 98888 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 54 ms 98772 KB Output is correct
2 Correct 255 ms 125872 KB Output is correct
3 Correct 215 ms 128568 KB Output is correct
4 Correct 278 ms 131524 KB Output is correct
5 Correct 301 ms 131412 KB Output is correct
6 Correct 256 ms 128156 KB Output is correct
7 Correct 705 ms 155892 KB Output is correct
8 Correct 285 ms 132532 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 98844 KB Output is correct
2 Correct 54 ms 98752 KB Output is correct
3 Correct 55 ms 98860 KB Output is correct
4 Correct 52 ms 98772 KB Output is correct
5 Correct 53 ms 98880 KB Output is correct
6 Correct 54 ms 98872 KB Output is correct
7 Correct 52 ms 98780 KB Output is correct
8 Correct 56 ms 98816 KB Output is correct
9 Correct 55 ms 98764 KB Output is correct
10 Correct 56 ms 98784 KB Output is correct
11 Correct 54 ms 98888 KB Output is correct
12 Correct 64 ms 98908 KB Output is correct
13 Correct 53 ms 98764 KB Output is correct
14 Correct 53 ms 98872 KB Output is correct
15 Correct 52 ms 98788 KB Output is correct
16 Correct 54 ms 98828 KB Output is correct
17 Correct 53 ms 98884 KB Output is correct
18 Correct 55 ms 98904 KB Output is correct
19 Correct 54 ms 98808 KB Output is correct
20 Correct 52 ms 98764 KB Output is correct
21 Correct 55 ms 98828 KB Output is correct
22 Correct 53 ms 98884 KB Output is correct
23 Correct 56 ms 99112 KB Output is correct
24 Correct 64 ms 99020 KB Output is correct
25 Correct 59 ms 99152 KB Output is correct
26 Correct 55 ms 99108 KB Output is correct
27 Correct 55 ms 99092 KB Output is correct
28 Correct 60 ms 99060 KB Output is correct
29 Correct 54 ms 99108 KB Output is correct
30 Correct 53 ms 99028 KB Output is correct
31 Correct 55 ms 99076 KB Output is correct
32 Correct 55 ms 99092 KB Output is correct
33 Correct 54 ms 99020 KB Output is correct
34 Correct 65 ms 99104 KB Output is correct
35 Correct 55 ms 99088 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 53 ms 98828 KB Output is correct
2 Correct 95 ms 104304 KB Output is correct
3 Correct 82 ms 104844 KB Output is correct
4 Correct 108 ms 107000 KB Output is correct
5 Correct 111 ms 107584 KB Output is correct
6 Correct 115 ms 107676 KB Output is correct
7 Correct 82 ms 104068 KB Output is correct
8 Correct 87 ms 103560 KB Output is correct
9 Correct 130 ms 107800 KB Output is correct
10 Correct 75 ms 105032 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 98844 KB Output is correct
2 Correct 54 ms 98752 KB Output is correct
3 Correct 55 ms 98860 KB Output is correct
4 Correct 52 ms 98772 KB Output is correct
5 Correct 53 ms 98880 KB Output is correct
6 Correct 54 ms 98872 KB Output is correct
7 Correct 52 ms 98780 KB Output is correct
8 Correct 56 ms 98816 KB Output is correct
9 Correct 55 ms 98764 KB Output is correct
10 Correct 56 ms 98784 KB Output is correct
11 Correct 54 ms 98888 KB Output is correct
12 Correct 64 ms 98908 KB Output is correct
13 Correct 53 ms 98764 KB Output is correct
14 Correct 53 ms 98872 KB Output is correct
15 Correct 52 ms 98788 KB Output is correct
16 Correct 54 ms 98828 KB Output is correct
17 Correct 53 ms 98884 KB Output is correct
18 Correct 55 ms 98904 KB Output is correct
19 Correct 54 ms 98808 KB Output is correct
20 Correct 52 ms 98764 KB Output is correct
21 Correct 55 ms 98828 KB Output is correct
22 Correct 53 ms 98884 KB Output is correct
23 Correct 56 ms 99112 KB Output is correct
24 Correct 64 ms 99020 KB Output is correct
25 Correct 59 ms 99152 KB Output is correct
26 Correct 55 ms 99108 KB Output is correct
27 Correct 55 ms 99092 KB Output is correct
28 Correct 60 ms 99060 KB Output is correct
29 Correct 54 ms 99108 KB Output is correct
30 Correct 53 ms 99028 KB Output is correct
31 Correct 55 ms 99076 KB Output is correct
32 Correct 55 ms 99092 KB Output is correct
33 Correct 54 ms 99020 KB Output is correct
34 Correct 65 ms 99104 KB Output is correct
35 Correct 55 ms 99088 KB Output is correct
36 Correct 53 ms 98828 KB Output is correct
37 Correct 95 ms 104304 KB Output is correct
38 Correct 82 ms 104844 KB Output is correct
39 Correct 108 ms 107000 KB Output is correct
40 Correct 111 ms 107584 KB Output is correct
41 Correct 115 ms 107676 KB Output is correct
42 Correct 82 ms 104068 KB Output is correct
43 Correct 87 ms 103560 KB Output is correct
44 Correct 130 ms 107800 KB Output is correct
45 Correct 75 ms 105032 KB Output is correct
46 Correct 54 ms 98852 KB Output is correct
47 Correct 53 ms 98816 KB Output is correct
48 Correct 54 ms 98888 KB Output is correct
49 Correct 53 ms 98796 KB Output is correct
50 Correct 53 ms 98764 KB Output is correct
51 Correct 55 ms 98884 KB Output is correct
52 Correct 52 ms 98876 KB Output is correct
53 Correct 53 ms 98864 KB Output is correct
54 Correct 54 ms 98880 KB Output is correct
55 Correct 54 ms 98844 KB Output is correct
56 Correct 55 ms 98880 KB Output is correct
57 Correct 55 ms 98996 KB Output is correct
58 Correct 54 ms 99020 KB Output is correct
59 Correct 55 ms 99096 KB Output is correct
60 Correct 57 ms 99076 KB Output is correct
61 Correct 57 ms 99132 KB Output is correct
62 Correct 62 ms 99024 KB Output is correct
63 Correct 57 ms 99060 KB Output is correct
64 Correct 56 ms 99068 KB Output is correct
65 Correct 57 ms 99020 KB Output is correct
66 Correct 57 ms 99076 KB Output is correct
67 Correct 56 ms 99020 KB Output is correct
68 Correct 54 ms 99092 KB Output is correct
69 Correct 54 ms 99032 KB Output is correct
70 Correct 52 ms 98848 KB Output is correct
71 Correct 86 ms 105052 KB Output is correct
72 Correct 83 ms 104952 KB Output is correct
73 Correct 110 ms 106988 KB Output is correct
74 Correct 110 ms 107612 KB Output is correct
75 Correct 117 ms 107748 KB Output is correct
76 Correct 86 ms 104144 KB Output is correct
77 Correct 77 ms 103632 KB Output is correct
78 Correct 133 ms 107792 KB Output is correct
79 Correct 74 ms 105120 KB Output is correct
80 Correct 93 ms 104908 KB Output is correct
81 Correct 119 ms 105140 KB Output is correct
82 Correct 93 ms 104980 KB Output is correct
83 Correct 108 ms 106844 KB Output is correct
84 Correct 99 ms 104644 KB Output is correct
85 Correct 141 ms 107780 KB Output is correct
86 Correct 98 ms 105208 KB Output is correct
87 Correct 87 ms 104012 KB Output is correct
88 Correct 118 ms 106868 KB Output is correct
89 Correct 104 ms 107980 KB Output is correct
90 Correct 98 ms 106816 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 98844 KB Output is correct
2 Correct 54 ms 98752 KB Output is correct
3 Correct 55 ms 98860 KB Output is correct
4 Correct 52 ms 98772 KB Output is correct
5 Correct 53 ms 98880 KB Output is correct
6 Correct 54 ms 98872 KB Output is correct
7 Correct 52 ms 98780 KB Output is correct
8 Correct 56 ms 98816 KB Output is correct
9 Correct 55 ms 98764 KB Output is correct
10 Correct 56 ms 98784 KB Output is correct
11 Correct 54 ms 98888 KB Output is correct
12 Correct 54 ms 98772 KB Output is correct
13 Correct 255 ms 125872 KB Output is correct
14 Correct 215 ms 128568 KB Output is correct
15 Correct 278 ms 131524 KB Output is correct
16 Correct 301 ms 131412 KB Output is correct
17 Correct 256 ms 128156 KB Output is correct
18 Correct 705 ms 155892 KB Output is correct
19 Correct 285 ms 132532 KB Output is correct
20 Correct 64 ms 98908 KB Output is correct
21 Correct 53 ms 98764 KB Output is correct
22 Correct 53 ms 98872 KB Output is correct
23 Correct 52 ms 98788 KB Output is correct
24 Correct 54 ms 98828 KB Output is correct
25 Correct 53 ms 98884 KB Output is correct
26 Correct 55 ms 98904 KB Output is correct
27 Correct 54 ms 98808 KB Output is correct
28 Correct 52 ms 98764 KB Output is correct
29 Correct 55 ms 98828 KB Output is correct
30 Correct 53 ms 98884 KB Output is correct
31 Correct 56 ms 99112 KB Output is correct
32 Correct 64 ms 99020 KB Output is correct
33 Correct 59 ms 99152 KB Output is correct
34 Correct 55 ms 99108 KB Output is correct
35 Correct 55 ms 99092 KB Output is correct
36 Correct 60 ms 99060 KB Output is correct
37 Correct 54 ms 99108 KB Output is correct
38 Correct 53 ms 99028 KB Output is correct
39 Correct 55 ms 99076 KB Output is correct
40 Correct 55 ms 99092 KB Output is correct
41 Correct 54 ms 99020 KB Output is correct
42 Correct 65 ms 99104 KB Output is correct
43 Correct 55 ms 99088 KB Output is correct
44 Correct 53 ms 98828 KB Output is correct
45 Correct 95 ms 104304 KB Output is correct
46 Correct 82 ms 104844 KB Output is correct
47 Correct 108 ms 107000 KB Output is correct
48 Correct 111 ms 107584 KB Output is correct
49 Correct 115 ms 107676 KB Output is correct
50 Correct 82 ms 104068 KB Output is correct
51 Correct 87 ms 103560 KB Output is correct
52 Correct 130 ms 107800 KB Output is correct
53 Correct 75 ms 105032 KB Output is correct
54 Correct 54 ms 98852 KB Output is correct
55 Correct 53 ms 98816 KB Output is correct
56 Correct 54 ms 98888 KB Output is correct
57 Correct 53 ms 98796 KB Output is correct
58 Correct 53 ms 98764 KB Output is correct
59 Correct 55 ms 98884 KB Output is correct
60 Correct 52 ms 98876 KB Output is correct
61 Correct 53 ms 98864 KB Output is correct
62 Correct 54 ms 98880 KB Output is correct
63 Correct 54 ms 98844 KB Output is correct
64 Correct 55 ms 98880 KB Output is correct
65 Correct 55 ms 98996 KB Output is correct
66 Correct 54 ms 99020 KB Output is correct
67 Correct 55 ms 99096 KB Output is correct
68 Correct 57 ms 99076 KB Output is correct
69 Correct 57 ms 99132 KB Output is correct
70 Correct 62 ms 99024 KB Output is correct
71 Correct 57 ms 99060 KB Output is correct
72 Correct 56 ms 99068 KB Output is correct
73 Correct 57 ms 99020 KB Output is correct
74 Correct 57 ms 99076 KB Output is correct
75 Correct 56 ms 99020 KB Output is correct
76 Correct 54 ms 99092 KB Output is correct
77 Correct 54 ms 99032 KB Output is correct
78 Correct 52 ms 98848 KB Output is correct
79 Correct 86 ms 105052 KB Output is correct
80 Correct 83 ms 104952 KB Output is correct
81 Correct 110 ms 106988 KB Output is correct
82 Correct 110 ms 107612 KB Output is correct
83 Correct 117 ms 107748 KB Output is correct
84 Correct 86 ms 104144 KB Output is correct
85 Correct 77 ms 103632 KB Output is correct
86 Correct 133 ms 107792 KB Output is correct
87 Correct 74 ms 105120 KB Output is correct
88 Correct 93 ms 104908 KB Output is correct
89 Correct 119 ms 105140 KB Output is correct
90 Correct 93 ms 104980 KB Output is correct
91 Correct 108 ms 106844 KB Output is correct
92 Correct 99 ms 104644 KB Output is correct
93 Correct 141 ms 107780 KB Output is correct
94 Correct 98 ms 105208 KB Output is correct
95 Correct 87 ms 104012 KB Output is correct
96 Correct 118 ms 106868 KB Output is correct
97 Correct 104 ms 107980 KB Output is correct
98 Correct 98 ms 106816 KB Output is correct
99 Correct 54 ms 98820 KB Output is correct
100 Correct 54 ms 98880 KB Output is correct
101 Correct 57 ms 98848 KB Output is correct
102 Correct 55 ms 98908 KB Output is correct
103 Correct 55 ms 98848 KB Output is correct
104 Correct 54 ms 98776 KB Output is correct
105 Correct 53 ms 98892 KB Output is correct
106 Correct 54 ms 98804 KB Output is correct
107 Correct 54 ms 98888 KB Output is correct
108 Correct 63 ms 98812 KB Output is correct
109 Correct 54 ms 98824 KB Output is correct
110 Correct 54 ms 98732 KB Output is correct
111 Correct 249 ms 130944 KB Output is correct
112 Correct 209 ms 128600 KB Output is correct
113 Correct 300 ms 131432 KB Output is correct
114 Correct 295 ms 131380 KB Output is correct
115 Correct 247 ms 128260 KB Output is correct
116 Correct 665 ms 155940 KB Output is correct
117 Correct 281 ms 132384 KB Output is correct
118 Correct 56 ms 99096 KB Output is correct
119 Correct 57 ms 99020 KB Output is correct
120 Correct 60 ms 99196 KB Output is correct
121 Correct 57 ms 99016 KB Output is correct
122 Correct 61 ms 99020 KB Output is correct
123 Correct 56 ms 99028 KB Output is correct
124 Correct 57 ms 99020 KB Output is correct
125 Correct 56 ms 99016 KB Output is correct
126 Correct 57 ms 99100 KB Output is correct
127 Correct 59 ms 99216 KB Output is correct
128 Correct 57 ms 99108 KB Output is correct
129 Correct 56 ms 99024 KB Output is correct
130 Correct 56 ms 99120 KB Output is correct
131 Correct 53 ms 98820 KB Output is correct
132 Correct 85 ms 105000 KB Output is correct
133 Correct 83 ms 104940 KB Output is correct
134 Correct 110 ms 106928 KB Output is correct
135 Correct 112 ms 107588 KB Output is correct
136 Correct 114 ms 107668 KB Output is correct
137 Correct 82 ms 104156 KB Output is correct
138 Correct 80 ms 103604 KB Output is correct
139 Correct 132 ms 107760 KB Output is correct
140 Correct 77 ms 105040 KB Output is correct
141 Correct 91 ms 104908 KB Output is correct
142 Correct 114 ms 105108 KB Output is correct
143 Correct 94 ms 104960 KB Output is correct
144 Correct 113 ms 106852 KB Output is correct
145 Correct 103 ms 104688 KB Output is correct
146 Correct 118 ms 107792 KB Output is correct
147 Correct 104 ms 105392 KB Output is correct
148 Correct 86 ms 104012 KB Output is correct
149 Correct 123 ms 106768 KB Output is correct
150 Correct 103 ms 107944 KB Output is correct
151 Correct 97 ms 106808 KB Output is correct
152 Correct 889 ms 228916 KB Output is correct
153 Correct 975 ms 230644 KB Output is correct
154 Correct 880 ms 226832 KB Output is correct
155 Correct 1576 ms 263936 KB Output is correct
156 Correct 1420 ms 231112 KB Output is correct
157 Correct 686 ms 196172 KB Output is correct
158 Correct 1060 ms 226220 KB Output is correct
159 Execution timed out 2053 ms 303332 KB Time limit exceeded
160 Halted 0 ms 0 KB -