BZOJ4597 Shoi2016 隨機序列

2021-08-02 09:36:56 字數 1388 閱讀 1069

bzoj4597

一開始看題一臉不可做的樣子。。肯定又有什麼鬼畜的結論qa

q 。

(看看題解之後)。。和加減沒什麼關係。。維護一下字首積的和就好了。 qa

q 然後自己拿n=

3 手寫試了一發。。md為什麼不自己想。。 an

s=∑i

=1n−

1(2∗

3n−i

−1∗∏

j=1i

ai)+

∏j=1

nai

線段樹維護一下就好了嘛。。然後每次將ax

修改為y ,影響的只有x到

n的值,相當於每個地方乘上y∗

inva

x 。

#include 

#include

#include

#include

#include

#include

#define n 100005

#define mod 1000000007

#define inf 200001

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

const ull base=31;

ll read()

while(isdigit(ch))

return

x*f;

}int n,m;

ll a[n],prod[n];

ll inv[10004];

class seg_treee[n<<2];

ll qpow(ll x,int

y) return rtn;

}void pushup(int p)

void pushdown(int p)

void build(int p,int l,int r)

int mid=l+r>>1;

build(p<<1,l,mid);build(p<<1|1,mid+1,r);

pushup(p);

} void update(int p,int

x,int

y,ll z)

if(e[p].tag!=1) pushdown(p);

if(y

<=mid) update(p<<1,x,y,z);

else

if(x>mid) update(p<<1|1,x,y,z);

else update(p<<1,x,mid,z),update(p<<1|1,mid+1,y,z);

pushup(p);

}int main()

return

0;}

BZOJ 4597 Shoi2016 隨機序列

很可做的一道題 考慮一下一段序列的答案為b x,x為最右連續一段是乘積,然後和為x,b則為對應的左邊的和 然後考慮在右邊加乙個數k,分類討論一下發現x kx,b 2x 3b 於是就可以dp了 然後dp可以矩陣轉移 於是就可以用線段樹維護矩陣 就水過去了 好像很簡單哎,ac率好高的說 include ...

Bzoj3562 神器化合物 Shoi 2014

ac通道 分析 若把每乙個原子看作乙個節點,將化學鍵看作一條邊,那麼這個題目要求的 分子的個數 很容易就可以看出是求圖中聯通塊的個數。求聯通塊的個數,可以使用並查集。可如何求出每一步的聯通塊的個數呢?可以知道,當連上一條邊時,若此邊連線的是兩個不同的聯通塊,那麼分子個數就會減一 當刪去一條邊時,若刪...

bzoj 4597 隨機序列

你的面前有n個數排成一行。分別為a1,a2,an。你打算在每相鄰的兩個 ai和 ai 1 間都插入乙個加號或者 減號或者乘號。那麼一共有 3 n 1 種可能的表示式。你對所有可能的表示式的值的和非常感興趣。但這畢竟太 簡單了,所以你還打算支援乙個修改操作,可以修改某個ai 的值。你能夠編寫乙個程式對...