Submission #979756

# Submission time Handle Problem Language Result Execution time Memory
979756 2024-05-11T10:48:03 Z Jarif_Rahman New Home (APIO18_new_home) C++17
57 / 100
5000 ms 315552 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 = 7e6;

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*=2;
    }
    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;

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

    int n, k, q; cin >> n >> k >> q;
    vector<tuple<int, int, int, int>> queries;

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

    vector<set<int>> stores(k);
    vector<map<int, int>> cnt(k);
    map<int, map<int, int>> mx[2];
    sparse_segtree S(L);

    auto 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]++;
    };
    auto 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);
    };

    auto 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);
        }
    };
    auto 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);
    };

    vector<int> cnt_t(k, 0);
    int nonzero = 0;

    vector<int> ans(q);

    for(auto [_, type, x, i]: queries){
        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 x: ans) cout << x << "\n";
}
# Verdict Execution time Memory Grader output
1 Correct 34 ms 164688 KB Output is correct
2 Correct 27 ms 164688 KB Output is correct
3 Correct 28 ms 164696 KB Output is correct
4 Correct 26 ms 164700 KB Output is correct
5 Correct 27 ms 164784 KB Output is correct
6 Correct 30 ms 164948 KB Output is correct
7 Correct 30 ms 164700 KB Output is correct
8 Correct 31 ms 164788 KB Output is correct
9 Correct 30 ms 164948 KB Output is correct
10 Correct 29 ms 165088 KB Output is correct
11 Correct 28 ms 164700 KB Output is correct
12 Correct 29 ms 164956 KB Output is correct
13 Correct 45 ms 164716 KB Output is correct
14 Correct 28 ms 164892 KB Output is correct
15 Correct 31 ms 164808 KB Output is correct
16 Correct 29 ms 164948 KB Output is correct
17 Correct 29 ms 164944 KB Output is correct
18 Correct 28 ms 164944 KB Output is correct
19 Correct 28 ms 164956 KB Output is correct
20 Correct 29 ms 164844 KB Output is correct
21 Correct 27 ms 164932 KB Output is correct
22 Correct 27 ms 164948 KB Output is correct
23 Correct 27 ms 164944 KB Output is correct
24 Correct 29 ms 164788 KB Output is correct
25 Correct 29 ms 164944 KB Output is correct
26 Correct 29 ms 164872 KB Output is correct
27 Correct 32 ms 164892 KB Output is correct
28 Correct 30 ms 164708 KB Output is correct
29 Correct 28 ms 164692 KB Output is correct
30 Correct 27 ms 164952 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 34 ms 164688 KB Output is correct
2 Correct 27 ms 164688 KB Output is correct
3 Correct 28 ms 164696 KB Output is correct
4 Correct 26 ms 164700 KB Output is correct
5 Correct 27 ms 164784 KB Output is correct
6 Correct 30 ms 164948 KB Output is correct
7 Correct 30 ms 164700 KB Output is correct
8 Correct 31 ms 164788 KB Output is correct
9 Correct 30 ms 164948 KB Output is correct
10 Correct 29 ms 165088 KB Output is correct
11 Correct 28 ms 164700 KB Output is correct
12 Correct 29 ms 164956 KB Output is correct
13 Correct 45 ms 164716 KB Output is correct
14 Correct 28 ms 164892 KB Output is correct
15 Correct 31 ms 164808 KB Output is correct
16 Correct 29 ms 164948 KB Output is correct
17 Correct 29 ms 164944 KB Output is correct
18 Correct 28 ms 164944 KB Output is correct
19 Correct 28 ms 164956 KB Output is correct
20 Correct 29 ms 164844 KB Output is correct
21 Correct 27 ms 164932 KB Output is correct
22 Correct 27 ms 164948 KB Output is correct
23 Correct 27 ms 164944 KB Output is correct
24 Correct 29 ms 164788 KB Output is correct
25 Correct 29 ms 164944 KB Output is correct
26 Correct 29 ms 164872 KB Output is correct
27 Correct 32 ms 164892 KB Output is correct
28 Correct 30 ms 164708 KB Output is correct
29 Correct 28 ms 164692 KB Output is correct
30 Correct 27 ms 164952 KB Output is correct
31 Correct 1088 ms 210368 KB Output is correct
32 Correct 83 ms 169044 KB Output is correct
33 Correct 1004 ms 204472 KB Output is correct
34 Correct 1076 ms 202764 KB Output is correct
35 Correct 1122 ms 211764 KB Output is correct
36 Correct 1124 ms 212432 KB Output is correct
37 Correct 702 ms 202320 KB Output is correct
38 Correct 673 ms 202708 KB Output is correct
39 Correct 549 ms 202176 KB Output is correct
40 Correct 571 ms 201912 KB Output is correct
41 Correct 468 ms 186256 KB Output is correct
42 Correct 485 ms 186816 KB Output is correct
43 Correct 75 ms 169684 KB Output is correct
44 Correct 458 ms 186048 KB Output is correct
45 Correct 465 ms 186260 KB Output is correct
46 Correct 470 ms 186928 KB Output is correct
47 Correct 264 ms 182912 KB Output is correct
48 Correct 286 ms 183884 KB Output is correct
49 Correct 319 ms 184748 KB Output is correct
50 Correct 340 ms 184252 KB Output is correct
51 Correct 335 ms 185272 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2796 ms 291728 KB Output is correct
2 Correct 1589 ms 295312 KB Output is correct
3 Correct 650 ms 269648 KB Output is correct
4 Correct 2549 ms 287736 KB Output is correct
5 Correct 1582 ms 294784 KB Output is correct
6 Correct 1555 ms 296012 KB Output is correct
7 Correct 664 ms 269744 KB Output is correct
8 Correct 2596 ms 287092 KB Output is correct
9 Correct 2861 ms 293848 KB Output is correct
10 Correct 2021 ms 295596 KB Output is correct
11 Correct 1499 ms 292764 KB Output is correct
12 Correct 1770 ms 294136 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 5082 ms 315552 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 34 ms 164688 KB Output is correct
2 Correct 27 ms 164688 KB Output is correct
3 Correct 28 ms 164696 KB Output is correct
4 Correct 26 ms 164700 KB Output is correct
5 Correct 27 ms 164784 KB Output is correct
6 Correct 30 ms 164948 KB Output is correct
7 Correct 30 ms 164700 KB Output is correct
8 Correct 31 ms 164788 KB Output is correct
9 Correct 30 ms 164948 KB Output is correct
10 Correct 29 ms 165088 KB Output is correct
11 Correct 28 ms 164700 KB Output is correct
12 Correct 29 ms 164956 KB Output is correct
13 Correct 45 ms 164716 KB Output is correct
14 Correct 28 ms 164892 KB Output is correct
15 Correct 31 ms 164808 KB Output is correct
16 Correct 29 ms 164948 KB Output is correct
17 Correct 29 ms 164944 KB Output is correct
18 Correct 28 ms 164944 KB Output is correct
19 Correct 28 ms 164956 KB Output is correct
20 Correct 29 ms 164844 KB Output is correct
21 Correct 27 ms 164932 KB Output is correct
22 Correct 27 ms 164948 KB Output is correct
23 Correct 27 ms 164944 KB Output is correct
24 Correct 29 ms 164788 KB Output is correct
25 Correct 29 ms 164944 KB Output is correct
26 Correct 29 ms 164872 KB Output is correct
27 Correct 32 ms 164892 KB Output is correct
28 Correct 30 ms 164708 KB Output is correct
29 Correct 28 ms 164692 KB Output is correct
30 Correct 27 ms 164952 KB Output is correct
31 Correct 1088 ms 210368 KB Output is correct
32 Correct 83 ms 169044 KB Output is correct
33 Correct 1004 ms 204472 KB Output is correct
34 Correct 1076 ms 202764 KB Output is correct
35 Correct 1122 ms 211764 KB Output is correct
36 Correct 1124 ms 212432 KB Output is correct
37 Correct 702 ms 202320 KB Output is correct
38 Correct 673 ms 202708 KB Output is correct
39 Correct 549 ms 202176 KB Output is correct
40 Correct 571 ms 201912 KB Output is correct
41 Correct 468 ms 186256 KB Output is correct
42 Correct 485 ms 186816 KB Output is correct
43 Correct 75 ms 169684 KB Output is correct
44 Correct 458 ms 186048 KB Output is correct
45 Correct 465 ms 186260 KB Output is correct
46 Correct 470 ms 186928 KB Output is correct
47 Correct 264 ms 182912 KB Output is correct
48 Correct 286 ms 183884 KB Output is correct
49 Correct 319 ms 184748 KB Output is correct
50 Correct 340 ms 184252 KB Output is correct
51 Correct 335 ms 185272 KB Output is correct
52 Correct 182 ms 185060 KB Output is correct
53 Correct 174 ms 178864 KB Output is correct
54 Correct 523 ms 191916 KB Output is correct
55 Correct 390 ms 186664 KB Output is correct
56 Correct 340 ms 186560 KB Output is correct
57 Correct 468 ms 187144 KB Output is correct
58 Correct 388 ms 184604 KB Output is correct
59 Correct 360 ms 185540 KB Output is correct
60 Correct 467 ms 185428 KB Output is correct
61 Correct 87 ms 179900 KB Output is correct
62 Correct 177 ms 186484 KB Output is correct
63 Correct 396 ms 188100 KB Output is correct
64 Correct 454 ms 187328 KB Output is correct
65 Correct 519 ms 186224 KB Output is correct
66 Correct 497 ms 186212 KB Output is correct
67 Correct 137 ms 172224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 34 ms 164688 KB Output is correct
2 Correct 27 ms 164688 KB Output is correct
3 Correct 28 ms 164696 KB Output is correct
4 Correct 26 ms 164700 KB Output is correct
5 Correct 27 ms 164784 KB Output is correct
6 Correct 30 ms 164948 KB Output is correct
7 Correct 30 ms 164700 KB Output is correct
8 Correct 31 ms 164788 KB Output is correct
9 Correct 30 ms 164948 KB Output is correct
10 Correct 29 ms 165088 KB Output is correct
11 Correct 28 ms 164700 KB Output is correct
12 Correct 29 ms 164956 KB Output is correct
13 Correct 45 ms 164716 KB Output is correct
14 Correct 28 ms 164892 KB Output is correct
15 Correct 31 ms 164808 KB Output is correct
16 Correct 29 ms 164948 KB Output is correct
17 Correct 29 ms 164944 KB Output is correct
18 Correct 28 ms 164944 KB Output is correct
19 Correct 28 ms 164956 KB Output is correct
20 Correct 29 ms 164844 KB Output is correct
21 Correct 27 ms 164932 KB Output is correct
22 Correct 27 ms 164948 KB Output is correct
23 Correct 27 ms 164944 KB Output is correct
24 Correct 29 ms 164788 KB Output is correct
25 Correct 29 ms 164944 KB Output is correct
26 Correct 29 ms 164872 KB Output is correct
27 Correct 32 ms 164892 KB Output is correct
28 Correct 30 ms 164708 KB Output is correct
29 Correct 28 ms 164692 KB Output is correct
30 Correct 27 ms 164952 KB Output is correct
31 Correct 1088 ms 210368 KB Output is correct
32 Correct 83 ms 169044 KB Output is correct
33 Correct 1004 ms 204472 KB Output is correct
34 Correct 1076 ms 202764 KB Output is correct
35 Correct 1122 ms 211764 KB Output is correct
36 Correct 1124 ms 212432 KB Output is correct
37 Correct 702 ms 202320 KB Output is correct
38 Correct 673 ms 202708 KB Output is correct
39 Correct 549 ms 202176 KB Output is correct
40 Correct 571 ms 201912 KB Output is correct
41 Correct 468 ms 186256 KB Output is correct
42 Correct 485 ms 186816 KB Output is correct
43 Correct 75 ms 169684 KB Output is correct
44 Correct 458 ms 186048 KB Output is correct
45 Correct 465 ms 186260 KB Output is correct
46 Correct 470 ms 186928 KB Output is correct
47 Correct 264 ms 182912 KB Output is correct
48 Correct 286 ms 183884 KB Output is correct
49 Correct 319 ms 184748 KB Output is correct
50 Correct 340 ms 184252 KB Output is correct
51 Correct 335 ms 185272 KB Output is correct
52 Correct 2796 ms 291728 KB Output is correct
53 Correct 1589 ms 295312 KB Output is correct
54 Correct 650 ms 269648 KB Output is correct
55 Correct 2549 ms 287736 KB Output is correct
56 Correct 1582 ms 294784 KB Output is correct
57 Correct 1555 ms 296012 KB Output is correct
58 Correct 664 ms 269744 KB Output is correct
59 Correct 2596 ms 287092 KB Output is correct
60 Correct 2861 ms 293848 KB Output is correct
61 Correct 2021 ms 295596 KB Output is correct
62 Correct 1499 ms 292764 KB Output is correct
63 Correct 1770 ms 294136 KB Output is correct
64 Execution timed out 5082 ms 315552 KB Time limit exceeded
65 Halted 0 ms 0 KB -