BZOJ 4636 蒟蒻的數列

2022-04-30 02:54:07 字數 1139 閱讀 9967

bzoj_4636_蒟蒻的數列_線段樹+動態開點

蒟蒻dcrusher不僅喜歡玩撲克,還喜歡研究數列

題目描述

dcrusher有乙個數列,初始值均為0,他進行n次操作,每次將數列[a,b)這個區間中所有比k小的數改為k,他想知

道n次操作後數列中所有元素的和。他還要玩其他遊戲,所以這個問題留給你解決。

第一行乙個整數n,然後有n行,每行三個正整數a、b、k。

n<=40000 , a、b、k<=10^9

乙個數,數列中所有元素的和

42 5 1

9 10 4

6 8 2

4 6 3

16把操作離線並從小到大排序,相當於線段樹維護區間賦值操作。

本題可以離散化也可以動態開點,我這裡處理不好線段樹維護離散後的區間因此寫了動態開點。

注意pushdown操作時如果沒有這個兒子也要開出來。

**:

#include #include #include #include using namespace std;

#define n 40050

#define maxn 1000000000

typedef long long ll;

struct a a[n];

bool cmp(const a &x,const a &y)

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

if(tag[p])

if(x<=mid) update(l,mid,x,y,w,ls[p]);

if(y>mid) update(mid+1,r,x,y,w,rs[p]);

t[p]=t[ls[p]]+t[rs[p]];

}int main()

/*sort(v+1,v+cnt+1);

cnt=unique(v+1,v+cnt+1)-v-1;

printf("%d\n",cnt);

for(i=1;i<=cnt;i++) printf("%d\n",v[i]); */

sort(a+1,a+n+1,cmp);

int root=0;

for(i=1;i<=n;i++)

printf("%lld\n",t[1]);

}

bzoj4636 蒟蒻的數列 線段樹

蒟蒻的數列 bzoj 4636 題目大意 給定乙個序列,初始均為0。n次操作 每次講一段區間中小於k的數都變成k。操作的最後詢問全域性和。注釋 1 le n le 4 cdot 10 4 想法 那個操作就是乙個不好好說話的操作,說白了就是對區間的每乙個數取max 然後我們對於那個序列建立分治線段樹。...

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

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

bzoj4363 蒟蒻的數列

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