답안 #723344

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
723344 2023-04-13T15:51:23 Z someone Measures (CEOI22_measures) C++14
100 / 100
250 ms 27452 KB
#include <bits/stdc++.h>
#define int long long
#define mid ((deb + fin) >> 1)
using namespace std;
    
const int M = 1 << 18, N = 2 * M, INF = 1e18 + 42;
    
struct Node {
    int mini, maxi, maxDiff, lazy, nb;
} node[N];
    
pair<int, int> pii[M];
int n, m, d, a[N], id[M];

inline void applyOp(int i, int add) {
    node[i].mini += add;
    node[i].maxi += add;
    node[i].lazy += add;
}
    
inline void upd(int i) {
    node[i].mini = INF;
    node[i].maxi = -INF;
    node[i].maxDiff = 0;
    for(int child : {i*2, i*2+1})
        if(node[child].nb) {
            node[i].mini = min(node[i].mini, node[child].mini);
            node[i].maxi = max(node[i].maxi, node[child].maxi);
            node[i].maxDiff = max(node[i].maxDiff, node[child].maxDiff);
        }
    if(node[i*2].nb && node[i*2+1].nb)
        node[i].maxDiff = max(node[i].maxDiff, node[i*2].maxi - node[i*2+1].mini);
}

inline void propage(int i) {
    applyOp(i*2, node[i].lazy);
    applyOp(i*2+1, node[i].lazy);
    node[i].lazy = 0;
}
    
void addNew(int i, int deb, int fin, int p, int val) {
    if(fin <= p || p < deb) return;
    if(fin - deb == 1 && deb == p) {
        node[i].nb = 1;
        node[i].lazy = 0;
        node[i].mini += val;
        node[i].maxi += val;
        return;
    }
    propage(i);
    addNew(i*2, deb, mid, p, val);
    addNew(i*2+1, mid, fin, p, val);
    node[i].nb = node[i*2].nb + node[i*2+1].nb;
    upd(i);
}
    
void update(int i, int deb, int fin, int l, int r, int add) {
    if(fin <= l || r <= deb) return;
    if(l <= deb && fin <= r) {
        applyOp(i, add);
        return;
    }
    propage(i);
    update(i*2, deb, mid, l, r, add);
    update(i*2+1, mid, fin, l, r, add);
    upd(i);
}
    
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n >> m >> d;
    for(int i = 0; i < n + m; i++) {
        cin >> a[i];
        pii[i].first = a[i];
        pii[i].second = i;
    }
    sort(pii, pii + n + m);
    for(int i = 0; i < n + m; i++)
        id[pii[i].second] = i;
    
    for(int i = 0; i < n + m; i++) {
        addNew(1, 0, M, id[i], a[i]);
        update(1, 0, M, id[i]+1, M, -d);
        if(i >= n) {
            if(node[1].maxDiff % 2 == 1) cout << node[1].maxDiff / 2 << ".5 ";
            else cout << node[1].maxDiff / 2 << ' ';
        }
    }
    cout << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 596 KB Output is correct
2 Correct 2 ms 596 KB Output is correct
3 Correct 2 ms 596 KB Output is correct
4 Correct 2 ms 596 KB Output is correct
5 Correct 2 ms 596 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 596 KB Output is correct
8 Correct 3 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 596 KB Output is correct
2 Correct 2 ms 596 KB Output is correct
3 Correct 2 ms 596 KB Output is correct
4 Correct 2 ms 596 KB Output is correct
5 Correct 2 ms 596 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 596 KB Output is correct
8 Correct 3 ms 596 KB Output is correct
9 Correct 234 ms 22760 KB Output is correct
10 Correct 230 ms 24232 KB Output is correct
11 Correct 170 ms 24224 KB Output is correct
12 Correct 194 ms 24140 KB Output is correct
13 Correct 156 ms 23760 KB Output is correct
14 Correct 169 ms 24156 KB Output is correct
15 Correct 215 ms 23584 KB Output is correct
16 Correct 156 ms 24140 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 178 ms 23648 KB Output is correct
2 Correct 175 ms 27312 KB Output is correct
3 Correct 178 ms 27084 KB Output is correct
4 Correct 177 ms 24960 KB Output is correct
5 Correct 175 ms 26256 KB Output is correct
6 Correct 176 ms 25308 KB Output is correct
7 Correct 178 ms 26264 KB Output is correct
8 Correct 168 ms 25036 KB Output is correct
9 Correct 168 ms 24908 KB Output is correct
10 Correct 183 ms 27344 KB Output is correct
11 Correct 168 ms 25804 KB Output is correct
12 Correct 182 ms 26812 KB Output is correct
13 Correct 174 ms 24916 KB Output is correct
14 Correct 181 ms 26892 KB Output is correct
15 Correct 181 ms 26716 KB Output is correct
16 Correct 165 ms 24580 KB Output is correct
17 Correct 180 ms 26204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 178 ms 23648 KB Output is correct
2 Correct 175 ms 27312 KB Output is correct
3 Correct 178 ms 27084 KB Output is correct
4 Correct 177 ms 24960 KB Output is correct
5 Correct 175 ms 26256 KB Output is correct
6 Correct 176 ms 25308 KB Output is correct
7 Correct 178 ms 26264 KB Output is correct
8 Correct 168 ms 25036 KB Output is correct
9 Correct 168 ms 24908 KB Output is correct
10 Correct 183 ms 27344 KB Output is correct
11 Correct 168 ms 25804 KB Output is correct
12 Correct 182 ms 26812 KB Output is correct
13 Correct 174 ms 24916 KB Output is correct
14 Correct 181 ms 26892 KB Output is correct
15 Correct 181 ms 26716 KB Output is correct
16 Correct 165 ms 24580 KB Output is correct
17 Correct 180 ms 26204 KB Output is correct
18 Correct 250 ms 25376 KB Output is correct
19 Correct 240 ms 27024 KB Output is correct
20 Correct 185 ms 27088 KB Output is correct
21 Correct 205 ms 25136 KB Output is correct
22 Correct 230 ms 25420 KB Output is correct
23 Correct 182 ms 25432 KB Output is correct
24 Correct 244 ms 25800 KB Output is correct
25 Correct 181 ms 24912 KB Output is correct
26 Correct 239 ms 24884 KB Output is correct
27 Correct 236 ms 27452 KB Output is correct
28 Correct 218 ms 25292 KB Output is correct
29 Correct 221 ms 26184 KB Output is correct
30 Correct 200 ms 23176 KB Output is correct
31 Correct 210 ms 25256 KB Output is correct
32 Correct 184 ms 25120 KB Output is correct
33 Correct 232 ms 23308 KB Output is correct
34 Correct 200 ms 24592 KB Output is correct