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