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之間的...