bzoj4636 蒟蒻的數列 線段樹

2022-05-01 20:33:11 字數 1078 閱讀 4482

蒟蒻的數列 bzoj-4636

題目大意:給定乙個序列,初始均為0。n次操作:每次講一段區間中小於k的數都變成k。操作的最後詢問全域性和。

注釋:$1\le n\le 4\cdot 10^4$。

想法:那個操作就是乙個不好好說話的操作,說白了就是對區間的每乙個數取max

然後我們對於那個序列建立分治線段樹。每個操作我都把它掛在對應的log的點上。

n個操作都執行完了之後我們從1號節點深搜,更新答案即可。

最後,附上醜陋的**... ...

#include #include #include #include #define inf 1e9 

#define n 40010

using namespace std;

typedef long long ll;

ll maxn[n*40],ans=0;

int ls[n*40],rs[n*40],cnt;

int root;

inline char nc()

ll read()

void update(int x,int y,ll val,int l,int r,int &pos)

int mid=(l+r)>>1;

if(y<=mid) update(x,y,val,l,mid,ls[pos]);

else if(mid>1;

query(maxn[pos],l,mid,ls[pos]);

query(maxn[pos],mid+1,r,rs[pos]);

if(!ls[pos]) ans+=maxn[pos]*(mid-l+1);

if(!rs[pos]) ans+=maxn[pos]*(r-mid);

}int main()

query(0,1,inf,root);

printf("%lld\n",ans);

return 0;

}

小結:get新技能:分治線段樹。

BZOJ 4636 蒟蒻的數列

bzoj 4636 蒟蒻的數列 線段樹 動態開點 蒟蒻dcrusher不僅喜歡玩撲克,還喜歡研究數列 題目描述 dcrusher有乙個數列,初始值均為0,他進行n次操作,每次將數列 a,b 這個區間中所有比k小的數改為k,他想知 道n次操作後數列中所有元素的和。他還要玩其他遊戲,所以這個問題留給你解...

bzoj4636 蒟蒻的數列 離散化 線段樹

題目描述 蒟蒻dcrusher不僅喜歡玩撲克,還喜歡研究數列 題目描述 dcrusher有乙個數列,初始值均為0,他進行n次操作,每次將數列 a,b 這個區間中所有比k小的數改為k,他想知道n次操作後數列中所有元素的和。他還要玩其他遊戲,所以這個問題留給你解決。輸入第一行乙個整數n,然後有n行,每行...

bzoj4363 蒟蒻的數列

description 蒟蒻dcrusher不僅喜歡玩撲克,還喜歡研究數列 題目描述 dcrusher有乙個數列,初始值均為0,他進行n次操作,每次將數列 a,b 這個區間中所有比k小的數改為k,他想知 道n次操作後數列中所有元素的和。他還要玩其他遊戲,所以這個問題留給你解決。input 第一行乙個...