好長啊
早上睡過頭了推出一堆假的柿子並不能過樣例
考慮怎麼求c(i)的期望。顯然有ci
=(ci
−1+1
)×pi
+ci−
1×t×
(1−p
i)c i=
(ci−
1+1)
×pi+
ci−1
×t×(
1−pi
)再考慮求combo分數的期望。顯然有co
mboi
=com
boi−
1+(c
i−1+
1)×p
i×b com
boi=
comb
oi−1
+(ci
−1+1
)×pi
×b這裡需要注意一下,只有當前i是perfect的情況才能拿貢獻,因此第i位我們要欽定為perfect
然後就能拿到50+pts
考慮這麼一類問題:我們知道乙個dp柿子,現在有多組詢問要求以不同位置作為起點做dp。
我們可以求出dp的轉移矩陣,對於給定的起點求出初始矩陣,對於詢問區間我們用線段樹維護轉移矩陣的區間積
那麼做法就非常顯然了。注意到我們的轉移矩陣只有3*3,部分位置始終為0且部分位置始終為1,那麼我們可以優化矩陣乘法的過程來底ka層chang優shu化
#include
#include
#include
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define fill(x,t) memset(x,t,sizeof(x))
#define lowbit(x) ((x)&(-(x)))
typedef
long
long ll;
const
int mod=998244353;
const
int n=500005*4;
struct matrix t[n],ret;
int n,q,ta,tb;
ll p[n],a,b,tt;
int read()
void write(int x)
inline ll ksm(ll x,ll dep)
return ret;
}inline
void mul(matrix &c,matrix a,matrix b)
inline
void modify(int now,int tl,int tr,int x,ll v)
int mid=(tl+tr)>>1;
if (x<=mid) modify(now<<1,tl,mid,x,v);
else modify(now<<1|1,mid+1,tr,x,v);
mul(t[now],t[now<<1],t[now<<1|1]);
}inline matrix query(int now,int tl,int tr,int l,int r)
void build(int now,int tl,int tr)
int mid=(tl+tr)>>1;
build(now<<1,tl,mid);
build(now<<1|1,mid+1,tr);
mul(t[now],t[now<<1],t[now<<1|1]);
}int main(void)
build(1,1,n);
for (;q--;) else
}return
0;}
JZOJ 3236 矮人排隊 線段樹
傳送門 小矮人們依據白雪公主的指令進行活動,我們需要做的是在一段移動後,高度連續的某些小矮人的位置是否也連續 因為涉及到區間詢問,所以我們自然而然的想到使用線段樹進行查詢 我們將線段樹的l r l rl r區間用來表示高度在l r l rl r內的小矮人,並維護他們的最左和最右的位置 因為如果位置是...
jzoj1278 排隊(線段樹)
1278.排隊 description 每天,農夫 john 的n 1 n 50,000 頭牛總是按同一序列排隊.有一天,john決定讓一些牛們玩一場飛盤比賽.他準備找一群在對列中為置連續的牛來進行比賽.但是為了避免水平懸殊,牛的身高不應該相差太大.john 準備了q 1 q 180,000 個可能...
Jzoj4747 被粉碎的線段樹
額這個題麼 有乙個很關鍵的點 結點個數依然為2n 1 證明可以看sam的講稿 不難發現以下性質 區間定位個數 區間所覆蓋的節點個數 2 區間長度 所以問題變為,乙個區間覆蓋了多少個節點?我們可以求出所有的節點,然後這個問題就是乙個二維偏序計數問題了 具體用離線 按照r排序套上樹狀陣列即可 inclu...