spoj GSS3
codeforces ???
tioj 1224
key \(\leq 3\)
key \(\geq 3\)
比較 pri
?
比較 pri
比較 pri
比較 pri
比較 pri
比較 pri
比較 pri
\(k = 4\)
unsigned ran() {
    static unsigned x = 19;
    return ++(x *= 0xdefaced);
}
struct node {
    node * left = NULL, * right = NULL;
    int key;
    unsigned pri;
    node(int key):key(key), pri(ran()){};
};
node * merge (node* a, node* b) {
    if (!a)return b;
    if (!b)return a;
    if (a->pri < b->pri) {
        a->right = merge(a->right, b);
        return a;
    }
    else {
        b->left = merge(a, b->left);
        return b;
    }
}
void split(node* now, int key, node* &a, node* &b) {
    if (!now) {
        a = b = NULL;
        return;
    }
    if (now->key < key) {
        a = now;
        split(now->right, key, a->right, b);
    }
    else {
        b = now;
        split(now->left, key, a, b->left);
    }
}
維護一個序列,操作有以下
請維護一個集合,使得他支援兩種操作 :
\(x \leq 10^5\)
操作數量 \(\leq 10^5\)
請維護一個集合,使得他支援兩種操作 :
ojdl 7129
# : \(x \leq 10^9\)
操作數量 \(\leq 3 \cdot10^5\)
有一些城市 編號由 \(1 ~ n\)
有一些科學家想採集隕石樣本,而第 \(i\) 個城市需要採集 \(p_i\) 個
有 \(k\) 筆事件兩兩事件時間差為 1 且按照時間順序 \(l_i, r_i, a_i\) 表達在從 \([l_i, r_i]\) 都將會有 \(a_i\) 顆隕石墜落
請輸出 \(n\) 行代表在第 \(i\) 座城市至少要多久才能完成樣本採集
\(1 \leq n \leq 300000, 1 \leq k \leq 300000\)
第 \(i\) 顆線段樹紀錄了時間從 \([1, i]\) 的所有事件,
那就對於每個 \(i\) 就可以二分搜答案了!
struct node {
    node *left = NULL, *right = NULL;
    int val;
};
node* add(node* old, int pos, int val) {
    node* res = new node(old), * now = res;
    int l = 1, r = n, m;
    res->val += val;
    while (l < r) {
        m = l + r >> 1;
        if (pos > m) {
            now->right = new node(old->right);
            now->right->val += val;
            now = now->right;
            old = old->right;
            r = m;
        }
        else {
            now->left = new node(old->left);
            now->left->val += val;
            now = now->left;
            old = old->left;
            l = m+1;
        }
    }
    return res;
}
node* add(node* old, int pos, int val) {
    node* res = new node(old), * now = res;
    int l = 1, r = n, m;
    res->val += val;
    while (l < r) {
        m = l + r >> 1;
        if (pos > m) {
            now->right = new node(old->right);
            now->right->val += val;
            now = now->right;
            old = old->right;
            r = m;
        }
        else {
            now->left = new node(old->left);
            now->left->val += val;
            now = now->left;
            old = old->left;
            l = m+1;
        }
    }
    return res;
}
靜態區間第 \( K \) 大
有兩種工作,總共有 n 個
第一種會佔用一個處理器 使用從 \(l_i\) 到 \(r_i\) 的所有時間 並且從頭到尾只能使用同一個處理器
第二種有完成期限,可以分配給不同的處理器,必須在 \(d_i\)之前完成,需要花 \(w_i\) 的時間
請問至少需要幾個處理器 才能完成所有工作
NOTE : 一個處理器在任何時刻都只能處理一個工作
第二種工作在任何時刻也最多只能被一個處理器處理
\(l_i \leq\ r_i \leq 10^6\)
\(n \leq 10^5\)
帶修改區間 \(K\) 大
struct bit {
    node* root[maxn];
    void add(int x, int y, int val) {
        for (;x <= maxn;x += x & -x)
            modify(root[x], y, val);
    }
    
};
struct bit{    
    void shift(vector<node*> &nodes, int dir) {
        static const l_type = 0;
        for (auto &i : nodes) i = (dir == l_type ? i->left : i->right);
    }
    int left_sum(vector<node*> &nodes) {
        int res = 0;
        for (auto i : nodes) res += i->left->cnt;
        return res;
    }
    int query(int l, int r, int k) {
        vector<node*> lnode, rnode;
        for (int i = l;i;i ^= i & -i) lnode.pb(root[i]);
        for (int i = r;i;i ^= i & -i) rnode.pb(root[i]);
        int L = 1, R = n, M;
        while (L < r) {
            M = L + R >> 1;
            if (int lcnt = left_sum(rnode) - left_sum(lnode) ; lcnt >= k) {
                shift(rnode, 0), shift(lnode, 0);
                R = M;
            }
            else {
                k -= lcnt;
                shift(rnode, 1), shift(lnode, 1);
                L = M+1;
            }
        }
        return L;
    }
};
\(dp_i := \) 以數值 \(i\) 結尾最長的答案
用 map<int,int> dp;
有 \(q, (q \leq 10^5)\) 筆操作
在碼頭上,你擁有一個碼頭,根據政府規定,一個碼頭一天最多只能有兩艘船停靠卸貨,你手上有一份名單上面有
\( n \leq 10^5 \) 個資訊,告訴你今天所有船的
停靠時間,離開時間,以及獲利
\(l_i, r_i, c_i, (l_i \leq r_i \leq 10^5, c_i \leq 10^9)\)
在任意時刻,一個碼頭最多都只能停靠一艘船,你可以選擇要不要讓他停靠,請問你今天最多能夠獲利多少呢?