全部评论 7

  • 
    ```cpp
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 5e5;
    #define x first
    #define y second
    #define pii pair<int,int>
    int n, m, q, idlim;
     
    int idh(int x, int y) {
    	return x * (m + 2) + y;
    }
     
    pii hdi(int id) {
    	return pii(id / (m + 2), id % (m + 2));
    }
     
    int idv(int x, int y) {
    	return y * (n + 2) + x;
    }
     
    pii vdi(int id) {
    	return pii(id % (n + 2), id / (n + 2));
    }
    template<class T>
     
    struct array2d {
    	T a[N];
    	int n, m;
    	void init(int val = 0) {
    		memset(a, val, sizeof(a));
    	}
    	void set_size(int n, int m, int val = 0) {
    		this->n = n;
    		this->m = m;
    		init(val);
    	}
    	T *operator[](int i) {
    		return a + i * (m + 2);
    	}
    	const T *operator[](int i)const {
    		return a + i * (m + 2);
    	}
    	T &operator[](pii p) {
    		return a[p.x * (m + 2) + p.y];
    	}
    	const T &operator[](pii p)const {
    		return a[p.x * (m + 2) + p.y];
    	}
    };
    array2d<int> v, h, col, lv, tim;
    vector<pii> piece;
     
    struct node {
    	int ch[2], sz;
    };
    node t[N * 30];
    int cnt;
     
    void pushup(int x) {
    	t[x].sz = t[t[x].ch[0]].sz + t[t[x].ch[1]].sz;
    }
     
    void insert(int p, int &x, int l, int r) {
    	if (!x)
    		x = ++cnt;
    	if (l == r) {
    		t[x].sz = 1;
    		return;
    	}
    	int mid = (l + r) >> 1;
    	if (p <= mid)
    		insert(p, t[x].ch[0], l, mid);
    	else
    		insert(p, t[x].ch[1], mid + 1, r);
    	pushup(x);
    }
     
    void erase(int p, int &x, int l, int r) {
    	if (!x)
    		return;
    	if (l == r) {
    		t[x].sz = 0;
    		return;
    	}
    	int mid = (l + r) >> 1;
    	if (p <= mid)
    		erase(p, t[x].ch[0], l, mid);
    	else
    		erase(p, t[x].ch[1], mid + 1, r);
    	pushup(x);
    }
     
    int merge(int x, int y) {
    	if (!(x && y))
    		return x + y;
    	t[x].ch[0] = merge(t[x].ch[0], t[y].ch[0]);
    	t[x].ch[1] = merge(t[x].ch[1], t[y].ch[1]);
    	if (t[x].ch[0] || t[x].ch[1])
    		pushup(x);
    	else
    		t[x].sz |= t[y].sz;
    	return x;
    }
     
    int query_rk(int v, int x, int l, int r) {
    	if (!t[x].sz)
    		return 0;
    	if (l == r)
    		return t[x].sz;
    	int mid = (l + r) >> 1;
    	if (v <= mid)
    		return query_rk(v, t[x].ch[0], l, mid);
    	else
    		return t[t[x].ch[0]].sz + query_rk(v, t[x].ch[1], mid + 1, r);
    }
    

    2024-12-23 来自 浙江

    0
  • 6

    2024-07-24 来自 浙江

    0
  • 老师,后面我没有时间了,只匆匆忙忙的做了一题

    2024-01-03 来自 广东

    0
  • ??????????????????

    2024-01-03 来自 广东

    0
  • 好诶

    2023-12-26 来自 广东

    0
  • AC君官方的AC代码能不能加注释?第六题函数代码根本看不懂.....
    (请原谅本狗的无知,愿官方能实现这个小小的请求)

    2023-12-25 来自 浙江

    0
  • 好诶!这次欢乐赛参与人数历史最高

    2023-12-25 来自 浙江

    0

热门讨论