bzoj5312 冒險 勢能均攤線段樹

2022-02-27 11:43:40 字數 1202 閱讀 5643

bzoj5312: 冒險

如果一次操作對區間& 和 區間| 產生的影響是相同的,那麼該操作對整個區間的影響都是相同的

對於每次操作,在某些位上的值,對於整個區間影響是相同的,對相同影響的操作直接打標記

否則遞迴子樹

複雜度證明:

#include#includeinline int read()  

while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();

return x *f ;

} const int maxn = 2000007;

int n,a[maxn],m;

int a[maxn << 1],o[maxn << 1],t[maxn << 1],tag[maxn];

#define ls x << 1

#define rs x << 1 | 1

inline void update(int x)

inline void ps(int x,int k )

void pushdown(int x)

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

int mid = l + r >> 1;

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

update(x);

} void modify(int x,int l,int r,int l,int r,int k,int type) else

if(l >= l && r <= r && t)

if(tag[x]) pushdown(x);

int mid = l + r >> 1;

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

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

update(x);

} int query(int x,int l,int r,int l ,int r)

int main() else if(type == 2) else

printf("%d\n",query(1,1,n,l,r));

} return 0;

}

bzoj5312 冒險 線段樹

kaiser終於成為冒險協會的一員,這次冒險協會派他去冒險,他來到一處古墓,卻被大門上的守護神擋住了去路,守護神給出了乙個問題,只有答對了問題才能進入,守護神給出了乙個自然數序列a,每次有一下三種操作。1,給出l,r,x,將序列l,r之間的所有數都 and x 2,給出l,r,x,將序列l,r之間的...

BZOJ5312 冒險 勢能均攤線段樹

題目鏈結 這玩意兒是聽shadowice說的,好像很厲害的樣子 我們維護出區間 區間 區間最大值 結論 如果一次操作對區間 和 區間 產生的影響是相同的,那麼該操作對整個區間的影響都是相同的 證明可以看這裡 然後就做完了。時間複雜度 o nklogn k 是二進位制位數,這裡是20 include ...

BZOJ5312 冒險 線段樹 位運算

kaiser終於成為冒險協會的一員,這次冒險協會派他去冒險,他來到一處古墓,卻被大門上的守護神擋住了去路,守護神給出了乙個問題,只有答對了問題才能進入,守護神給出了乙個自然數序列a,每次有一下三種操作。1,給出l,r,x,將序列l,r之間的所有數都 and x 2,給出l,r,x,將序列l,r之間的...