很可做的一道題
考慮一下一段序列的答案為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 的值。你能夠編寫乙個程式對...