演算法優化專題E POJ 2528

2021-10-03 10:57:31 字數 1640 閱讀 2338

【題目大意】

有一塊長度為x的板(1<=x<=10000000)均分成x份,每份長乙個單位長度。現在有n張海報(1<=n<=10000),每張海報有個區間[li,ri],表示這張海報會占用[li,ri]的位置,若區間[li,ri]有其他海報,那麼這些海報會被新貼的覆蓋,按照輸入的順序貼這n張海報。問最後能看見多少張海報。(同一張海報由於被覆蓋分成多段只算一張)

【解題思路】

由於li,lr很大,但海報的數量相對來說是比較小的。

所以把海報的區間離散化。

後貼的海報會覆蓋前面的海報。

所以我們從後面「貼「起。

從後面"貼"起,例如貼第i張,若區間內還有空位那麼最終顯示出來的海報i。

對於第i張海報,若區間[li,ri]還有空位,那麼ans+1

用線段樹維護即可。

【**】

#include

#include

#include

using

namespace std;

int n;

bool sym;

struct data

b[101010];

int a[

101010];

int ans;

bool

cmp(data x,data y)

bool tree[

101010];

void

update

(int l,

int r,

int l,

int r,

int root)if(

!tree[root]

)return

;int mid=

(l+r)/2

;update

(l,mid,l,r,root*2)

;update

(mid+

1,r,l,r,root*2+

1); tree[root]

=tree[root*2]

| tree[root*2+

1];}

void

query

(int l,

int r,

int l,

int r,

int root)if(

!tree[root]

)return

;int mid=

(l+r)/2

;query

(l,mid,l,r,root*2)

;query

(mid+

1,r,l,r,root*2+

1); tree[root]

=tree[root*2]

| tree[root*2+

1];}

intmain()

sort

(b+1

,b+n+n+

1,cmp)

;int nbr=0;

for(

int i=

1;i<=

2*n;i++

) ans=0;

for(

int i=n;i>=

1;i--

)printf

("%d\n"

,ans);}

}

專題(一)優化演算法

2.動量 momentum 演算法 2.2 nag 演算法 nesterov 動量 3.自適應學習率的優化演算法 3.2 rmsprop 3.3 adadelta 3.4 adam 4.如何選擇優化演算法 5.基於二階梯度的優化演算法 微積分中使用梯度表示函式增長最快的方向 因此,神經網路中使用負梯...

演算法優化專題 C POJ 2777

題目大意 長度為l的板被分成l段,每段長乙個單位長度 1 l 100000 有o個操作 1 o 100000 操作分兩種 c a b c 表示將區間 a,b 染成顏色c 1 c 30 p a b 輸出 a,b 有多少種不同的顏色 開始時 1,l 的顏色為1 解題思路 觀察顏色的種數最多為30種。因此...

優化演算法介紹2

優化演算法介紹2 牛頓法 擬牛頓法介紹及其實現 上篇部落格介紹了利用梯度方法進行優化的幾個演算法,簡單來說就是通過計算損失函式的在當前點的梯度,衡量向哪個方向移動會獲得最快的降速,本篇所講的幾個演算法是它們的延伸。他們不僅計算出當前點的下降速度,而且還計算出當前下降速度的加速度,即這個下降速度會變大...