답안 #979775

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
979775 2024-05-11T10:57:38 Z Jarif_Rahman 새 집 (APIO18_new_home) C++17
57 / 100
3824 ms 599000 KB
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define sc second
using namespace std;
typedef long long int ll;
typedef string str;

const int lim = 5e6;

struct Node{
    int inc = -1e9, dec = -1e9;
    Node *l = nullptr, *r = nullptr;

    Node(){}
    Node(Node *_l, Node *_r): l(_l), r(_r){}
    void update(){
        inc = -1e9;
        if(l) inc = max(inc, l->inc);
        if(r) inc = max(inc, r->inc);

        dec = -1e9;
        if(l) dec = max(dec, l->dec);
        if(r) dec = max(dec, r->dec);
    }
}Nodes[lim];

int ls_node = 0;
Node* newNode(){
    return &Nodes[ls_node++];
}

struct sparse_segtree{
    Node* root = newNode();
    int n = 1;
    sparse_segtree(int _n){
        while(n < _n) n<<=1;
    }
    void update(int i, Node *nd, int a, int b, int x, bool inc){
        if(a == b){
            if(inc) nd->inc = x+n-1-i;
            else nd->dec = x+i;
            return;
        }
        int m = (a+b)>>1;
        if(i <= m){
            if(nd->l == nullptr) nd->l = newNode();
            update(i, nd->l, a, m, x, inc);
        }
        else{
             if(nd->r == nullptr) nd->r = newNode();
             update(i, nd->r, m+1, b, x, inc);
        }
        nd->update();
    }
    void update(int i, int x, bool inc){
        update(i, root, 0, n-1, x, inc);
    }

    int get(int l, int r, Node* nd, int a, int b, bool inc){
        if(!nd) return -1e9;
        if(a > r || b < l) return -1e9;
        if(a >= l && b <= r){
            if(inc) return nd->inc;
            else return nd->dec;
        }
        int m = (a+b)>>1;
        return max(get(l, r, nd->l, a, m, inc), get(l, r, nd->r, m+1, b, inc));
    }
    int get(int l, int r, bool inc){
        return get(l, r, root, 0, n-1, inc);
    }
};

const int L = 1e8+5, N = 3e5;
tuple<int, int, int, int> queries[3*N];
set<int> stores[N];
map<int, int> cnt[N];
map<int, map<int, int>> mx[2];
sparse_segtree S(L);
int cnt_t[N];
int nonzero = 0;
int ans[N];

void add_to_mx(int i, int x, bool inc){
    if(mx[inc][i].empty() || x > mx[inc][i].rbegin()->first) S.update(i, x, inc);
    mx[inc][i][x]++;
}
void remove_from_mx(int i, int x, bool inc){
    mx[inc][i][x]--;
    if(mx[inc][i][x] == 0) mx[inc][i].erase(x);
    if(mx[inc][i].empty()) S.update(i, -1e9, inc);
    else if(x > mx[inc][i].rbegin()->first) S.update(i, mx[inc][i].rbegin()->first, inc);
};

void add(int t, int x){
    cnt[t][x]++;
    if(cnt[t][x] > 1) return;
    auto it = stores[t].insert(x).first;
    if(stores[t].size() == 1){
        add_to_mx(0, x, false);
        add_to_mx(L-1, L-1-x, true);
    }
    else if(it == stores[t].begin()){
        remove_from_mx(0, *next(it), false);
        add_to_mx(0, x, false);
        int md = (x+*next(it))>>1;
        if(md > x) add_to_mx(md, md-x, true);
        add_to_mx(md+1, *next(it)-md-1, false);
    }
    else if(next(it) == stores[t].end()){
        remove_from_mx(L-1, L-1-*prev(it), true);
        int md = (*prev(it)+x)>>1;
        if(md > *prev(it)) add_to_mx(md, md-*prev(it), true);
        add_to_mx(md+1, x-md-1, false);
        add_to_mx(L-1, L-1-x, true);
    }
    else{
        int md = (*prev(it)+*next(it))>>1;
        if(md > *prev(it)) remove_from_mx(md, md-*prev(it), true);
        remove_from_mx(md+1, *next(it)-md-1, false);

        md = (*prev(it)+x)>>1;
        if(md > *prev(it)) add_to_mx(md, md-*prev(it), true);
        add_to_mx(md+1, x-md-1, false);

        md = (x+*next(it))>>1;
        if(md > x) add_to_mx(md, md-x, true);
        add_to_mx(md+1, *next(it)-md-1, false);
    }
};
void remove(int t, int x){
    cnt[t][x]--;
    if(cnt[t][x] > 0) return;
    auto it = stores[t].find(x);
    if(stores[t].size() == 1){
        remove_from_mx(0, x, false);
        remove_from_mx(L-1, L-1-x, true);
    }
    else if(it == stores[t].begin()){
        add_to_mx(0, *next(it), false);
        remove_from_mx(0, x, false);
        int md = (x+*next(it))>>1;
        if(md > x) remove_from_mx(md, md-x, true);
        remove_from_mx(md+1, *next(it)-md-1, false);
    }
    else if(next(it) == stores[t].end()){
        add_to_mx(L-1, L-1-*prev(it), true);
        int md = (*prev(it)+x)>>1;
        if(md > *prev(it)) remove_from_mx(md, md-*prev(it), true);
        remove_from_mx(md+1, x-md-1, false);
        remove_from_mx(L-1, L-1-x, true);
    }
    else{
        int md = (*prev(it)+*next(it))>>1;
        if(md > *prev(it)) add_to_mx(md, md-*prev(it), true);
        add_to_mx(md+1, *next(it)-md-1, false);

        md = (*prev(it)+x)>>1;
        if(md > *prev(it)) remove_from_mx(md, md-*prev(it), true);
        remove_from_mx(md+1, x-md-1, false);

        md = (x+*next(it))>>1;
        if(md > x) remove_from_mx(md, md-x, true);
        remove_from_mx(md+1, *next(it)-md-1, false);
    }
    stores[t].erase(it);
};

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, k, q; cin >> n >> k >> q;

    for(int i = 0; i < n; i++){
        int x, t, a, b; cin >> x >> t >> a >> b; t--;
        queries[2*i] = {a, 0, x, t};
        queries[2*i+1] = {b, 2, x, t};
    }
    for(int i = 0; i < q; i++){
        int l, y; cin >> l >> y;
        queries[2*n+i] = {y, 1, l, i};
    }
    sort(queries, queries+2*n+q);

    fill(cnt_t, cnt_t+k, 0);
    for(int qq = 0; qq < 2*n+q; qq++){
        auto [_, type, x, i] = queries[qq];
        if(type == 0){
            cnt_t[i]++;
            if(cnt_t[i] == 1) nonzero++;
            add(i, x);
        }
        else if(type == 2){
            cnt_t[i]--;
            if(cnt_t[i] == 0) nonzero--;
            remove(i, x);
        }
        else{
            if(nonzero < k) ans[i] = -1;
            else ans[i] = max(S.get(0, x, 0)-x, S.get(x, S.n-1, 1)-(S.n-1)+x);
        }
    }

    for(int i = 0; i < q; i++) cout << ans[i] << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 149932 KB Output is correct
2 Correct 26 ms 149848 KB Output is correct
3 Correct 25 ms 149972 KB Output is correct
4 Correct 26 ms 150104 KB Output is correct
5 Correct 27 ms 149780 KB Output is correct
6 Correct 28 ms 150108 KB Output is correct
7 Correct 29 ms 149852 KB Output is correct
8 Correct 27 ms 150096 KB Output is correct
9 Correct 28 ms 149852 KB Output is correct
10 Correct 28 ms 150076 KB Output is correct
11 Correct 27 ms 149852 KB Output is correct
12 Correct 29 ms 150100 KB Output is correct
13 Correct 26 ms 149852 KB Output is correct
14 Correct 28 ms 149948 KB Output is correct
15 Correct 33 ms 150096 KB Output is correct
16 Correct 34 ms 150108 KB Output is correct
17 Correct 29 ms 150260 KB Output is correct
18 Correct 27 ms 150104 KB Output is correct
19 Correct 26 ms 150096 KB Output is correct
20 Correct 27 ms 149940 KB Output is correct
21 Correct 26 ms 150040 KB Output is correct
22 Correct 26 ms 149876 KB Output is correct
23 Correct 27 ms 150108 KB Output is correct
24 Correct 27 ms 149960 KB Output is correct
25 Correct 30 ms 150124 KB Output is correct
26 Correct 29 ms 150032 KB Output is correct
27 Correct 26 ms 149848 KB Output is correct
28 Correct 28 ms 150108 KB Output is correct
29 Correct 27 ms 150044 KB Output is correct
30 Correct 26 ms 150048 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 149932 KB Output is correct
2 Correct 26 ms 149848 KB Output is correct
3 Correct 25 ms 149972 KB Output is correct
4 Correct 26 ms 150104 KB Output is correct
5 Correct 27 ms 149780 KB Output is correct
6 Correct 28 ms 150108 KB Output is correct
7 Correct 29 ms 149852 KB Output is correct
8 Correct 27 ms 150096 KB Output is correct
9 Correct 28 ms 149852 KB Output is correct
10 Correct 28 ms 150076 KB Output is correct
11 Correct 27 ms 149852 KB Output is correct
12 Correct 29 ms 150100 KB Output is correct
13 Correct 26 ms 149852 KB Output is correct
14 Correct 28 ms 149948 KB Output is correct
15 Correct 33 ms 150096 KB Output is correct
16 Correct 34 ms 150108 KB Output is correct
17 Correct 29 ms 150260 KB Output is correct
18 Correct 27 ms 150104 KB Output is correct
19 Correct 26 ms 150096 KB Output is correct
20 Correct 27 ms 149940 KB Output is correct
21 Correct 26 ms 150040 KB Output is correct
22 Correct 26 ms 149876 KB Output is correct
23 Correct 27 ms 150108 KB Output is correct
24 Correct 27 ms 149960 KB Output is correct
25 Correct 30 ms 150124 KB Output is correct
26 Correct 29 ms 150032 KB Output is correct
27 Correct 26 ms 149848 KB Output is correct
28 Correct 28 ms 150108 KB Output is correct
29 Correct 27 ms 150044 KB Output is correct
30 Correct 26 ms 150048 KB Output is correct
31 Correct 1142 ms 196052 KB Output is correct
32 Correct 75 ms 154356 KB Output is correct
33 Correct 1042 ms 190824 KB Output is correct
34 Correct 1012 ms 188952 KB Output is correct
35 Correct 1106 ms 197276 KB Output is correct
36 Correct 1069 ms 197644 KB Output is correct
37 Correct 685 ms 188484 KB Output is correct
38 Correct 675 ms 189184 KB Output is correct
39 Correct 540 ms 187376 KB Output is correct
40 Correct 598 ms 188260 KB Output is correct
41 Correct 516 ms 172528 KB Output is correct
42 Correct 461 ms 172276 KB Output is correct
43 Correct 73 ms 154652 KB Output is correct
44 Correct 472 ms 172488 KB Output is correct
45 Correct 462 ms 172716 KB Output is correct
46 Correct 474 ms 172668 KB Output is correct
47 Correct 263 ms 168436 KB Output is correct
48 Correct 276 ms 169736 KB Output is correct
49 Correct 335 ms 171060 KB Output is correct
50 Correct 324 ms 170448 KB Output is correct
51 Correct 334 ms 171640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2697 ms 266580 KB Output is correct
2 Correct 1517 ms 276996 KB Output is correct
3 Correct 632 ms 221444 KB Output is correct
4 Correct 2329 ms 259272 KB Output is correct
5 Correct 1497 ms 275936 KB Output is correct
6 Correct 1507 ms 276348 KB Output is correct
7 Correct 613 ms 221364 KB Output is correct
8 Correct 2367 ms 258896 KB Output is correct
9 Correct 2676 ms 272544 KB Output is correct
10 Correct 1818 ms 277352 KB Output is correct
11 Correct 1409 ms 274280 KB Output is correct
12 Correct 1655 ms 276188 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3824 ms 599000 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 149932 KB Output is correct
2 Correct 26 ms 149848 KB Output is correct
3 Correct 25 ms 149972 KB Output is correct
4 Correct 26 ms 150104 KB Output is correct
5 Correct 27 ms 149780 KB Output is correct
6 Correct 28 ms 150108 KB Output is correct
7 Correct 29 ms 149852 KB Output is correct
8 Correct 27 ms 150096 KB Output is correct
9 Correct 28 ms 149852 KB Output is correct
10 Correct 28 ms 150076 KB Output is correct
11 Correct 27 ms 149852 KB Output is correct
12 Correct 29 ms 150100 KB Output is correct
13 Correct 26 ms 149852 KB Output is correct
14 Correct 28 ms 149948 KB Output is correct
15 Correct 33 ms 150096 KB Output is correct
16 Correct 34 ms 150108 KB Output is correct
17 Correct 29 ms 150260 KB Output is correct
18 Correct 27 ms 150104 KB Output is correct
19 Correct 26 ms 150096 KB Output is correct
20 Correct 27 ms 149940 KB Output is correct
21 Correct 26 ms 150040 KB Output is correct
22 Correct 26 ms 149876 KB Output is correct
23 Correct 27 ms 150108 KB Output is correct
24 Correct 27 ms 149960 KB Output is correct
25 Correct 30 ms 150124 KB Output is correct
26 Correct 29 ms 150032 KB Output is correct
27 Correct 26 ms 149848 KB Output is correct
28 Correct 28 ms 150108 KB Output is correct
29 Correct 27 ms 150044 KB Output is correct
30 Correct 26 ms 150048 KB Output is correct
31 Correct 1142 ms 196052 KB Output is correct
32 Correct 75 ms 154356 KB Output is correct
33 Correct 1042 ms 190824 KB Output is correct
34 Correct 1012 ms 188952 KB Output is correct
35 Correct 1106 ms 197276 KB Output is correct
36 Correct 1069 ms 197644 KB Output is correct
37 Correct 685 ms 188484 KB Output is correct
38 Correct 675 ms 189184 KB Output is correct
39 Correct 540 ms 187376 KB Output is correct
40 Correct 598 ms 188260 KB Output is correct
41 Correct 516 ms 172528 KB Output is correct
42 Correct 461 ms 172276 KB Output is correct
43 Correct 73 ms 154652 KB Output is correct
44 Correct 472 ms 172488 KB Output is correct
45 Correct 462 ms 172716 KB Output is correct
46 Correct 474 ms 172668 KB Output is correct
47 Correct 263 ms 168436 KB Output is correct
48 Correct 276 ms 169736 KB Output is correct
49 Correct 335 ms 171060 KB Output is correct
50 Correct 324 ms 170448 KB Output is correct
51 Correct 334 ms 171640 KB Output is correct
52 Correct 181 ms 165872 KB Output is correct
53 Correct 150 ms 159312 KB Output is correct
54 Correct 501 ms 175772 KB Output is correct
55 Correct 381 ms 170324 KB Output is correct
56 Correct 324 ms 169280 KB Output is correct
57 Correct 438 ms 171764 KB Output is correct
58 Correct 406 ms 168500 KB Output is correct
59 Correct 318 ms 167440 KB Output is correct
60 Correct 458 ms 171240 KB Output is correct
61 Correct 77 ms 160200 KB Output is correct
62 Correct 170 ms 165620 KB Output is correct
63 Correct 364 ms 170424 KB Output is correct
64 Correct 417 ms 171348 KB Output is correct
65 Correct 506 ms 171912 KB Output is correct
66 Correct 482 ms 172624 KB Output is correct
67 Correct 132 ms 157468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 149932 KB Output is correct
2 Correct 26 ms 149848 KB Output is correct
3 Correct 25 ms 149972 KB Output is correct
4 Correct 26 ms 150104 KB Output is correct
5 Correct 27 ms 149780 KB Output is correct
6 Correct 28 ms 150108 KB Output is correct
7 Correct 29 ms 149852 KB Output is correct
8 Correct 27 ms 150096 KB Output is correct
9 Correct 28 ms 149852 KB Output is correct
10 Correct 28 ms 150076 KB Output is correct
11 Correct 27 ms 149852 KB Output is correct
12 Correct 29 ms 150100 KB Output is correct
13 Correct 26 ms 149852 KB Output is correct
14 Correct 28 ms 149948 KB Output is correct
15 Correct 33 ms 150096 KB Output is correct
16 Correct 34 ms 150108 KB Output is correct
17 Correct 29 ms 150260 KB Output is correct
18 Correct 27 ms 150104 KB Output is correct
19 Correct 26 ms 150096 KB Output is correct
20 Correct 27 ms 149940 KB Output is correct
21 Correct 26 ms 150040 KB Output is correct
22 Correct 26 ms 149876 KB Output is correct
23 Correct 27 ms 150108 KB Output is correct
24 Correct 27 ms 149960 KB Output is correct
25 Correct 30 ms 150124 KB Output is correct
26 Correct 29 ms 150032 KB Output is correct
27 Correct 26 ms 149848 KB Output is correct
28 Correct 28 ms 150108 KB Output is correct
29 Correct 27 ms 150044 KB Output is correct
30 Correct 26 ms 150048 KB Output is correct
31 Correct 1142 ms 196052 KB Output is correct
32 Correct 75 ms 154356 KB Output is correct
33 Correct 1042 ms 190824 KB Output is correct
34 Correct 1012 ms 188952 KB Output is correct
35 Correct 1106 ms 197276 KB Output is correct
36 Correct 1069 ms 197644 KB Output is correct
37 Correct 685 ms 188484 KB Output is correct
38 Correct 675 ms 189184 KB Output is correct
39 Correct 540 ms 187376 KB Output is correct
40 Correct 598 ms 188260 KB Output is correct
41 Correct 516 ms 172528 KB Output is correct
42 Correct 461 ms 172276 KB Output is correct
43 Correct 73 ms 154652 KB Output is correct
44 Correct 472 ms 172488 KB Output is correct
45 Correct 462 ms 172716 KB Output is correct
46 Correct 474 ms 172668 KB Output is correct
47 Correct 263 ms 168436 KB Output is correct
48 Correct 276 ms 169736 KB Output is correct
49 Correct 335 ms 171060 KB Output is correct
50 Correct 324 ms 170448 KB Output is correct
51 Correct 334 ms 171640 KB Output is correct
52 Correct 2697 ms 266580 KB Output is correct
53 Correct 1517 ms 276996 KB Output is correct
54 Correct 632 ms 221444 KB Output is correct
55 Correct 2329 ms 259272 KB Output is correct
56 Correct 1497 ms 275936 KB Output is correct
57 Correct 1507 ms 276348 KB Output is correct
58 Correct 613 ms 221364 KB Output is correct
59 Correct 2367 ms 258896 KB Output is correct
60 Correct 2676 ms 272544 KB Output is correct
61 Correct 1818 ms 277352 KB Output is correct
62 Correct 1409 ms 274280 KB Output is correct
63 Correct 1655 ms 276188 KB Output is correct
64 Runtime error 3824 ms 599000 KB Execution killed with signal 11
65 Halted 0 ms 0 KB -