BZOJ 4597 Shoi2016 隨機序列

2021-07-12 03:14:21 字數 947 閱讀 7693

很可做的一道題

考慮一下一段序列的答案為b+x,x為最右連續一段是乘積,然後和為x,b則為對應的左邊的和

然後考慮在右邊加乙個數k,分類討論一下發現x'=kx,b'=2x+3b

於是就可以dp了

然後dp可以矩陣轉移

於是就可以用線段樹維護矩陣

就水過去了

(好像很簡單哎,ac率好高的說)

#include#include#include#include#include#include#include#include#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)

#define per(i,r,l) for(int i=r;i>=l;i--)

#define mmt(a,v) memset(a,v,sizeof(a))

#define tra(i,u) for(int i=head[u];i;i=e[i].next)

using namespace std;

typedef long long ll;

const int n=100000+5;

const int p=(1e9)+7;

struct matrix

matrix operator * (matrix &b)

};struct nodetr[n<<2];

#define lc o<<1

#define rc o<<1|1

void pushup(int o)

void update(int o,int p,int v)

}int a[n];

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

}else

}int main()

return 0;

}

BZOJ4597 Shoi2016 隨機序列

bzoj4597 一開始看題一臉不可做的樣子。肯定又有什麼鬼畜的結論qa q 看看題解之後 和加減沒什麼關係。維護一下字首積的和就好了。qa q 然後自己拿n 3 手寫試了一發。md為什麼不自己想。an s i 1n 1 2 3n i 1 j 1i ai j 1 nai 線段樹維護一下就好了嘛。然後...

Bzoj3562 神器化合物 Shoi 2014

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

bzoj 4597 隨機序列

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