competitive-programing

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Astral-23/competitive-programing

:heavy_check_mark: verify/Datastructure_pbds_set.test.cpp

Depends on

Code

#define PROBLEM "https://judge.yosupo.jp/problem/predecessor_problem"
#include "../Utility/template.hpp"
#include "../Datastructure/pbds_set.hpp"

int main () {


    TR<int> cnt;

    int N, Q;
    cin >> N >> Q;
    string T;
    cin >> T;

    rep(t, 0, N) if(T[t] == '1') cnt.insert(t);
    

    while(Q--) {
        int t, k;
        cin >> t >> k;
        if(t == 0) {
            cnt.insert(k);
        }
        else if(t==1) {
		  cnt.erase(k);
        }
        else if(t==2) {
            int it = cnt.order_of_key(k);
            if(it < cnt.size() && *cnt.find_by_order(it) == k) cout << 1 << '\n';
            else cout << 0 << "\n";
        }
        else if(t==3) {
            int it = cnt.order_of_key(k);
            if(it < cnt.size()) cout << *cnt.find_by_order(it) << '\n';
            else cout << -1 << '\n';
        }
        else {
            int it = cnt.order_of_key(k);
            if(it < cnt.size() && *cnt.find_by_order(it) == k) cout << k << '\n';
            else {
                it--;
                if(it >= 0) cout << *cnt.find_by_order(it) << '\n';
                else cout << -1 << '\n';
            }

        }
    }

}
#line 1 "verify/Datastructure_pbds_set.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/predecessor_problem"
#line 1 "Utility/template.hpp"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, s, t) for (ll i = s; i < (ll)(t); i++)
#define rrep(i, s, t) for (ll i = (ll)(t) - 1; i >= (ll)(s); i--)
#define all(x) begin(x), end(x)

#define TT template <typename T>
TT using vec = vector<T>;
template <class T1, class T2> bool chmin(T1 &x, T2 y) {
    return x > y ? (x = y, true) : false;
}
template <class T1, class T2> bool chmax(T1 &x, T2 y) {
    return x < y ? (x = y, true) : false;
}
struct io_setup {
    io_setup() {
        ios::sync_with_stdio(false);
        std::cin.tie(nullptr);
        cout << fixed << setprecision(15);
    }
} io_setup;

/*
@brief verify用テンプレート
*/
#line 1 "Datastructure/pbds_set.hpp"
//ここから
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
TT using TR = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
TT using MTR = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;

// set
// insert, erase, find, find_by_order, order_of_key, size

/*
--set--
insert(要素)
erase(find(要素)), erase(要素)
find(要素)
find_by_order(数字)
order_of_key(要素)
size()
*/

/* 
--multiset--
insert(要素)
erase(find_by_order(order_of_key(要素)))
  注:  erase(要素), erase(find(要素))は意味がなかった
find(要素)
find_by_order(数字)
order_of_key(要素)
size()
*/

/*
@brief pdbsのテンプレート
*/
#line 4 "verify/Datastructure_pbds_set.test.cpp"

int main () {


    TR<int> cnt;

    int N, Q;
    cin >> N >> Q;
    string T;
    cin >> T;

    rep(t, 0, N) if(T[t] == '1') cnt.insert(t);
    

    while(Q--) {
        int t, k;
        cin >> t >> k;
        if(t == 0) {
            cnt.insert(k);
        }
        else if(t==1) {
		  cnt.erase(k);
        }
        else if(t==2) {
            int it = cnt.order_of_key(k);
            if(it < cnt.size() && *cnt.find_by_order(it) == k) cout << 1 << '\n';
            else cout << 0 << "\n";
        }
        else if(t==3) {
            int it = cnt.order_of_key(k);
            if(it < cnt.size()) cout << *cnt.find_by_order(it) << '\n';
            else cout << -1 << '\n';
        }
        else {
            int it = cnt.order_of_key(k);
            if(it < cnt.size() && *cnt.find_by_order(it) == k) cout << k << '\n';
            else {
                it--;
                if(it >= 0) cout << *cnt.find_by_order(it) << '\n';
                else cout << -1 << '\n';
            }

        }
    }

}
Back to top page