Submission #65507267


Source Code Expand

#include<bits/stdc++.h>

using namespace std;

using ll = long long;

const ll N = 3e6;

struct segtree {
    struct node {
        ll lo, hi, vl;
        node *left, *right;
 
        node(ll low, ll high) {
            lo = low, hi = high;
            vl = 1LL;
            left = right = nullptr;
 
            if (low < high) {
                ll mid = (lo+hi)/2;
                left = new node(lo, mid);
                right = new node(mid+1, hi);
                update();
            }
        }
 
        node (ll low, ll high, ll val, node *lt, node *rt) {
            lo = low, hi = high;
            vl = val;
            left = lt, right = rt;
        }
 
        void update() {
            vl = left->vl+right->vl;
        }
    };
 
    public:
    node *root;
    vector<node*> v;
    
    void set(ll i, ll vl, node *nd) {
        if (nd->lo > i || nd->hi < i) return;
        if (nd->lo == nd->hi) nd->vl = vl;
        else {
            set(i, vl, nd->left);
            set(i, vl, nd->right);
            nd->update();
        }
    }
 
    void r_gen(ll i, ll vl, node *nd) {
        if (nd->lo >= i) v.push_back(nd);
        else if (nd->hi < i) return;
        else {
            r_gen(i, vl, nd->left);
            r_gen(i, vl, nd->right);
        }
    }
 
    void l_gen(ll i, ll vl, node *nd) {
        if (nd->hi <= i) v.push_back(nd);
        else if (nd->lo > i) return;
        else {
            l_gen(i, vl, nd->right);
            l_gen(i, vl, nd->left);
        }
    }
 
    ll upper_bound(ll val, node *nd) {
        if (nd->vl <= val) {
            return nd->hi+1LL;
        }
        else if (nd->lo == nd->hi) return nd->lo;
        else if (nd->left->vl <= val) return upper_bound(val-nd->left->vl, nd->right);
        else return upper_bound(val, nd->left);
    }
 
    // Returns location-1 than the usual definition
    ll lower_bound(ll val, node *nd) {
        if (nd->vl <= val) return nd->lo-1LL;
        else if (nd->lo == nd->hi) return nd->lo;
        else if (nd->right->vl <= val) return lower_bound(val, nd->left);
        else return lower_bound(val, nd->right);
    }
 
    public:
    segtree (ll n) {
        root = new node(0, n-1);
    }
 
    void set(ll i, ll vl) {
        set(i, vl, root);
    }
 
    ll r_srch(ll i, ll vl) {
        v.clear();
        r_gen(i, vl, root);
        ll ret;
        for (auto nd: v) {
            ret = upper_bound(vl, nd)-1LL;
            if (ret < nd->hi) break;
        }
        return ret;
    }
 
    ll l_srch(ll i, ll vl) {
        v.clear();
        l_gen(i, vl, root);
        ll ret;
        for (auto nd: v) {
            ret = lower_bound(vl, nd)+1LL;
            if (ret > nd->lo) break;
        }
        return ret;
    }
};

int main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);

    ll q;
    cin >> q;

    set<ll> st;
    vector<bool> v(N+1, true);
    segtree tree(N+1);
    tree.set(0LL, 0LL);
    
    while (q--) {
        ll a, b;
        cin >> a >> b;

        if (a <= N && v[a]) {
            for (ll x = a; x <= N; x += a) if (v[x]) {
                tree.set(x, 0LL);
                v[x] = false;
            }
        }

        ll ans = tree.upper_bound(b-1, tree.root);
        cout << ans << '\n';
    }
    return 0;
};

Submission Info

Submission Time
Task C - Removal of Multiples
User akshaykhandelwal
Language C++ 20 (gcc 12.2)
Score 600
Code Size 3409 Byte
Status AC
Exec Time 1930 ms
Memory 284888 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 1
AC × 40
Set Name Test Cases
Sample 01_sample_01.txt
All 01_sample_01.txt, 02_small_AB_01.txt, 02_small_AB_02.txt, 02_small_AB_03.txt, 02_small_AB_04.txt, 02_small_AB_05.txt, 03_rand_1_01.txt, 03_rand_1_02.txt, 03_rand_1_03.txt, 03_rand_1_04.txt, 03_rand_1_05.txt, 04_rand_2_01.txt, 04_rand_2_02.txt, 04_rand_2_03.txt, 04_rand_2_04.txt, 04_rand_2_05.txt, 05_rand_3_01.txt, 05_rand_3_02.txt, 05_rand_3_03.txt, 05_rand_3_04.txt, 05_rand_3_05.txt, 06_rand_4_01.txt, 06_rand_4_02.txt, 06_rand_4_03.txt, 06_rand_4_04.txt, 06_rand_4_05.txt, 06_rand_4_06.txt, 06_rand_4_07.txt, 06_rand_4_08.txt, 06_rand_4_09.txt, 06_rand_4_10.txt, 06_rand_4_11.txt, 06_rand_4_12.txt, 06_rand_4_13.txt, 06_rand_4_14.txt, 06_rand_4_15.txt, 06_rand_4_16.txt, 07_max_ans_01.txt, 07_max_ans_02.txt, 07_max_ans_03.txt
Case Name Status Exec Time Memory
01_sample_01.txt AC 365 ms 284656 KiB
02_small_AB_01.txt AC 1189 ms 284788 KiB
02_small_AB_02.txt AC 1179 ms 284736 KiB
02_small_AB_03.txt AC 945 ms 284732 KiB
02_small_AB_04.txt AC 1039 ms 284736 KiB
02_small_AB_05.txt AC 1052 ms 284748 KiB
03_rand_1_01.txt AC 209 ms 284756 KiB
03_rand_1_02.txt AC 213 ms 284660 KiB
03_rand_1_03.txt AC 209 ms 284888 KiB
03_rand_1_04.txt AC 209 ms 284692 KiB
03_rand_1_05.txt AC 210 ms 284788 KiB
04_rand_2_01.txt AC 869 ms 284792 KiB
04_rand_2_02.txt AC 884 ms 284696 KiB
04_rand_2_03.txt AC 863 ms 284788 KiB
04_rand_2_04.txt AC 845 ms 284880 KiB
04_rand_2_05.txt AC 806 ms 284792 KiB
05_rand_3_01.txt AC 530 ms 284760 KiB
05_rand_3_02.txt AC 560 ms 284808 KiB
05_rand_3_03.txt AC 538 ms 284792 KiB
05_rand_3_04.txt AC 564 ms 284804 KiB
05_rand_3_05.txt AC 524 ms 284748 KiB
06_rand_4_01.txt AC 845 ms 284804 KiB
06_rand_4_02.txt AC 881 ms 284684 KiB
06_rand_4_03.txt AC 1909 ms 284792 KiB
06_rand_4_04.txt AC 1930 ms 284652 KiB
06_rand_4_05.txt AC 1251 ms 284884 KiB
06_rand_4_06.txt AC 1280 ms 284748 KiB
06_rand_4_07.txt AC 1237 ms 284764 KiB
06_rand_4_08.txt AC 1261 ms 284696 KiB
06_rand_4_09.txt AC 811 ms 284708 KiB
06_rand_4_10.txt AC 851 ms 284708 KiB
06_rand_4_11.txt AC 1650 ms 284884 KiB
06_rand_4_12.txt AC 1699 ms 284760 KiB
06_rand_4_13.txt AC 1454 ms 284692 KiB
06_rand_4_14.txt AC 1488 ms 284788 KiB
06_rand_4_15.txt AC 1662 ms 284804 KiB
06_rand_4_16.txt AC 1684 ms 284804 KiB
07_max_ans_01.txt AC 835 ms 284664 KiB
07_max_ans_02.txt AC 1898 ms 284692 KiB
07_max_ans_03.txt AC 1400 ms 284736 KiB