戳我
我們將現在所要進行的數設為\(now\)
我們分情況討論一下
他自己不翻倍
他自己翻倍
我們首先來看看\(1\)操作
如果要滿足他對排名沒有影響,那麼不能進行翻倍的數只有\([\lceil\frac\rceil,now]\)。(我考場上不知道在幹嗎,寫的是能進行翻倍的數,麻煩好多,常數也大)。我們假設這一段為\(cnt\)個,那麼這一段的答案就是:
\[c_^
\]再來看看\(2\)操作
如果我們要講\(now*2\)要使得排名不變,那麼\([now,now*2)\)則必須翻倍,將區間內的數射為res,其他的隨便選那些數都可以。答案就是
\[c_^
\]最後的答案就是
\[c_^+c_^
\]**寫的十分醜陋,畢竟是考場寫的嗎
#include#define int long long
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
const int mod=998244353;
using namespace std;
int read()
struct node a[100010];
bool cmp(const node & a , const node & b )
return ans;
}main()
for(int i=1;i<=n;i++)
cout
}
PKUSC2018 真實排名
對每個數,先分類討論,將答案分為這個數有翻倍和這個數沒翻倍。在討論前,我們規定 low x 為小於等於這個數的數的個數,當前數為 x 如果這個數沒翻倍 我們考慮哪些數翻倍不會影響這個數的排名,一種是翻倍後依然小於 x 的,一種是本來就大於等於 x 的。那麼對於第一種情況,情況數為 c low x 1...
PKUSC2018 真實排名 線段樹 組合數
pkusc2018 真實排名 對於每個數 val 分兩種情況討論 1 當 val 不翻倍時,那麼可以翻倍的是權值比 frac 小的和大於等於 val 的。2 當 val 翻倍時,顯然權值在 val,val 2 1 的都要翻倍,剩下可以翻倍的是權值比 val 小的和大於等於 2 val 的。用權值線段...
P5368 PKUSC2018 真實排名
problem link 對於每個 a i 我們可以考慮這 k 個選手中要不要有 a i 如果沒有的話,那我們就看看有哪些 a j 在翻倍後不會影響到 a i 的排名 顯然 2 a j或者 a i le a j 的這些 a j 都滿足要求,我們記它們的個數為 cnt 1 那麼如果這 k 個中有 a ...