題目大意:維護乙個平衡樹,支援插入乙個數,刪除小於乙個值的所有數,k 大值查詢,每個節點權值加減乙個數。
題解:所有節點權值加減操作可以考慮直接維護乙個全域性標記,刪除小於乙個值的所有數字為乙個二分的過程,複雜度為 \(o(logn)\),具體做法為:若當前子樹根節點權值小於 x,則直接刪除整顆左子樹,繼續遍歷,否則訪問左子樹。
**如下
#include using namespace std;
const int maxn=1e5+10;
inline int read()while(!isdigit(ch));
dowhile(isdigit(ch));
return f*x;
}int n,mi,tag,ans;
struct nodet[maxn];
int tot,root;
inline int newnode(int val)
inline void pushup(int o)
inline void zig(int &o)
inline void zag(int &o)
void insert(int &o,int val)else
}void remove(int &o,int val)
pushup(o);
}int kth(int o,int k)
void solve()
} printf("%d\n",ans);
}int main()
洛谷P1486 鬱悶的出納員 Treap
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...
NOI2004, 洛谷P1486 鬱悶的出納員
題目描述 oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙...
洛谷 1486 鬱悶的出納員 Treap
題意概述 要求維護乙個序列支援以下操作 1,插入元素x 2,把序列的所有元素加上x 3,把序列的所有元素減去x,同時低於乙個給定的下限的元素馬上被刪除 4,詢問序列中第k大的元素。題解 treap 用乙個delta記錄元素的增減情況,即實際上的元素的值應該是qval root,x delta,那麼插...