蒟蒻的數列 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 第一行乙個...