洛谷 P2781 傳教

2022-03-03 07:07:25 字數 1340 閱讀 1248

題意很簡單,就是要求你寫乙個資料結構,支援區間加法和區間查詢

顯然,線段樹模板嘛。。。

不過$n<=10^9$,驚呆世人,啊哈,靈光一現,分塊貌似可做,emmmm有感覺不行,$nlogn$?

線段樹空間是炸掉了,re $50$分

#include#define  n 100000000

using

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 走...