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