BZOJ1558 JSOI2009 等差數列

2022-02-28 14:03:45 字數 1011 閱讀 8928

傳送門等差數列的題麼,先差分一下,然後就變成了乙個數列上,求\([l,r]\)區間內連續相同的段數了。很相似的是[sdoi2011]染色這道題,但是由於我們這個線段樹存的是差分後的陣列,所以需要考慮乙個數是否作為乙個分段的頭和尾造成的影響。這個也是可以使用線段樹快速維護的。

#include using namespace std;

#define ls rt<<1

#define rs rt<<1|1

#define mid ((l+r)>>1)

const int maxn=1e5+7;

#define ll long long

int a[maxn],n,q;

char opt[12];

struct post[maxn<<2];

po operator +(po x,po y)

inline void clear(po x)

int val[maxn<<2];

inline void pushup(int rt)

inline void pushdown(int l,int r,int rt)

}inline void build(int l,int r,int rt)

build(l,mid,ls);build(mid+1,r,rs);

pushup(rt);

}inline void change(int l,int r,int l,int r,int rt,int k)

pushdown(l,r,rt);

if(l<=mid) change(l,r,l,mid,ls,k);

if(r>mid) change(l,r,mid+1,r,rs,k);

pushup(rt);

}inline po query(int l,int r,int l,int r,int rt)

inline int read()

int main()

} else

}}

bzoj 1558 JSOI2009 等差數列

把原陣列變為差分陣列,然後剩下的就十分顯然了 區間查詢用線段樹維護 修改操作就是區間加法和兩個單點修改 乙個等差數列實際上就是 開頭乙個數字 數值相等的一段 唯一的難點在於討論這個開頭的數字的去向 所以我們可以先不把左右兩端點列入考慮物件,然後在合併時再討論去向,綜上需要維護的東西有 1.區間的左右...

小店購物 JSOI2008 BZOJ 2260

grant是乙個個體戶老闆,他經營的小店因為其豐富的優惠方案深受附近居民的青睞,生意紅火。小店的優惠方案十分簡單有趣。grant規定 在一次消費過程中,如果您在本店購買了精製油的話,您購買香皂時就可以享受2.00元 塊的 如果您在本店購買了香皂的話,您購買可樂時就可以享受1.50元 聽的 諸如此類的...

BZOJ 4327 JSOI2012 玄武密碼

字尾自動機裸題。藉著這道裸題總結一下字尾自動機的查詢問題。1.查字首 查詢時不跳parent,遇到空節點就跳出。2.查子串 查詢時跳parent,記錄最大ans.3.查次數 lct維護right陣列 4.查不同的串的數目 在建樹時維護,乙個點對答案的貢獻為this max len this pare...