BZOJ 1503 鬱悶的出納員 無旋treap

2021-08-28 12:26:57 字數 1041 閱讀 6075

bzoj 1503

想到這題解法不難

主要是自己debug了半天 竟然因為期間update放迴圈裡面 de了兩個多小時 無語 想哭

思路就是用乙個tmp代替加減影響 這樣我們插入的時候就是插入num-tmp 然後出來的時候 後來更新的結果是tmp' 

tmp' = tmp(後)-tmp(當時) 那是不是你加上這個tmp 就是答案了?

就用無旋轉treap解決

/*

bzoj 1503

*/#include #include #include #include #include #include #include #include #include #include #define dbg(x) cout<<#x<<" = "<< (x)<< endl

using namespace std;

const int max_n = 500010;

int siz[max_n],ch[max_n][2],rnd[max_n],val[max_n];

int t,ans,minn,tmp,cnt,m,x,y,z,rt,p,a;

int read()

while(c>='0'&&c<='9')

return x*f;

}void update(int x)

int insert(int a)

//區間merge if(rnd[a]=rnd[r],那我們可以保留第二棵樹的右子樹,另一顆樹作為它的左子樹。

}void split(int now,int k,int &x,int &y)

else

}update(now);

}int getrank(int now,int a) //直接按照a-1的權值把樹分開,那麼x樹中最大的應該小於等於a-1,那麼a的排名就是size[x]+1

void ins(int v)

int kth(int p,int k)

}printf("%d\n",ans);

return 0;

}

bzoj1503 鬱悶的出納員

oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的 工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好 就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的...

BZOJ1503 鬱悶的出納員

出納員是乙個優秀的職業。根據題意要構造一種資料結構使得能動態維護乙個權值大於等於min的集合,並且支援查詢排名等操作,資料範圍來看複雜度是nlogn 由以上得出結論使用平衡樹 我用的是treap,如果刪的話就要把整顆左子樹和根節點一起刪再處理右子樹的,其他操作和普通平衡樹一樣,可以看我之前那個模板。...

鬱悶的出納員(bzoj 1503)

oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...