題意很簡單,就是要求你寫乙個資料結構,支援區間加法和區間查詢
顯然,線段樹模板嘛。。。
不過$n<=10^9$,驚呆世人,啊哈,靈光一現,分塊貌似可做,emmmm有感覺不行,$nlogn$?
線段樹空間是炸掉了,re $50$分
#include#define n 100000000using
namespace
std;
struct
nodetr[n];
intn,m;
void build(int k,int l,int
r)void push(intk)}
void push_down(int
k)void add(int k,int ql,int qr,int
val)
push(k);
if(ql<=mid) add(k<<1
,ql,qr,val);
if(qr>mid) add(k<<1|1
,ql,qr,val);
push_down(k);
}int ask(int k,int ql,int
qr)int
main()
return0;
}
轉大佬部落格
動態開點線段樹,指標寫的,只好用指標,學習一下
#include#define n 100000000#define ll long long
using
namespace
std;
struct
node
void
push_up()
void push_down(int l,int
r)}*root=new
node();
intn,m,tot;
void add(node *rt,int l,int r,int ql,int
qr,ll val)
rt->push_down(l,r);
int mid=(l+r)>>1
;
if(ql<=mid) add(rt->lc,l,mid,ql,qr,val);
if(qr>mid) add(rt->rc,mid+1
,r,ql,qr,val);
rt->push_up();
}ll ask(node *rt,int l,int r,int ql,int
qr)
intmain()
return0;
}
由於此題$m<=10^3$詢問極少,可以暴力列舉前面的的區間
洛谷 P2781 傳教
題目鏈結 讀完題後 哎線段樹水題呀!再一看資料範圍 好像 不對勁。其實這道題並不難,因為 m 值很小,所以可以用 o n 2 o n 2 o n2 的演算法直接過。對於每個 1 操作,把它記下來。對於每個 2 操作,將之前所有記錄的區間與 2 操作取個交集就 ok 了。當然也可以把 2 操作也記下來...
題解 洛谷P2781 傳教(線段樹)
可以說是資料結構學傻了的典型案例了 昨天跳到這題上 然後思考了一下 噫!好!線段樹裸題 然後打完板子,發現 n le 10 9 顯然線段樹直接做不太行 然後這題又只有普及的難度 然後我就打了神奇的動態開點線段樹水過 qwq之後看題解發現正解是 o m 2 的暴力 因為常數小跑的更快啊qwq incl...
洛谷P5049 洛谷P5022 題解 旅行
原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...