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 的值。你能夠編寫乙個程式對...