問題 D 陽光雨露 離散化 線段樹 動態開點

2021-10-22 06:37:22 字數 1573 閱讀 9092

思路:

1e9嘛..賽中沒有動態開點的板子,手寫調1小時多最後mle,麻了。第二天改了動態的寫法,然後re。瘋狂re。剛剛改出來re70分。

先放離散化的寫法吧。(真的方便很多..賽中為什麼想不開阿)

#include#include#include#include#include#include#include#include#include#define debug(a) cout<<#a<<"="<>1;

build(p*2,l,mid);

build(p*2+1,mid+1,r);

push_up(p);

}void modify(ll p,ll l,ll r,ll d)

push_down(p);

ll mid=(tree[p].l+tree[p].r)>>1;

if(l<=mid) modify(p*2,l,r,d);

if(r>mid) modify(p*2+1,l,r,d);

push_up(p);

}ll query(ll p,ll l,ll r)

push_down(p);

ll mid=(tree[p].l+tree[p].r)>>1;

ll ans=1;

if(l<=mid) ans=max(ans,query(p*2,l,r));

if(r>mid) ans=max(ans,query(p*2+1,l,r));

return ans;

}int main(void)

else if(q[i].op==2)

a[++tot]=q[i].l;

a[++tot]=q[i].r;

}sort(a+1,a+1+tot);

ll siz=unique(a+1,a+1+tot)-a-1;

build(1,1,siz);

for(ll i=1;i<=m;i++)

else if(q[i].op==2)

}void push_up(ll now)

ll times=0;

void update(ll now,ll l,ll r,ll d)

ll mid=(tree[now].l+tree[now].r)>>1;

// times++;

// debug(mid);

/* if(times>=10)*/

//if(tree[now].l!=tree[now].r)

if(r>mid)

//}push_up(now);

}ll query(ll now,ll l,ll r)

ll mid=(tree[now].l+tree[now].r)>>1;

ll ans=1;

if(l<=mid) ans=max(ans,query(tree[now].lson,l,r));

if(r>mid) ans=max(ans,query(tree[now].rson,l,r));

return ans;

}int main(void)

else if(op==2)

}}

離散化問題

題目傳送 uvalive 4127 the sky is the limit 大白書離散化簡單題。找了半天錯誤,居然是少輸出乙個空行。頓時感覺自己萌萌噠。其中計算幾何是套的之前留下的模板。ac include include include include include include inclu...

Vijos p1002 過河 離散化距離 區間DP

題意 一條長度為l l 1e9 的橋上有n 1 n 100 顆石頭。橋的起點為0終點為l.乙隻青蛙從0開始跳,每次跳的長度在s,t 1 s t 10 之間。問青蛙過河最少踩到的石頭的數量?思路 區間dp的感覺很強烈。但是範圍實在是太大了。並且有一種感覺就是當兩顆相鄰的石頭之間的距離相距很遠時,其中間...

POJ2528 海報問題 線段樹 離散化

有一兩年沒有搞了,有點生疏,這道題目是線段樹的,以前在學校搞過,搞這道題目第二天才搞出來,而且參考了另外的解題報告。問題的抽象如下,給定一條數軸,長度為 l 1千萬單位,然後在數軸上的某些區間染色,第i次對區間染色為i,共染色n 10000次。給出每次染色的區間,問最後能看見多少種顏色。線段樹處理染...