題解 洛谷P2781 傳教(線段樹)

2022-05-01 21:18:07 字數 1048 閱讀 5243

可以說是資料結構學傻了的典型案例了

昨天跳到這題上

然後思考了一下

噫!好!線段樹裸題

然後打完板子,發現\(  n \le 10^9 \)

顯然線段樹直接做不太行

然後這題又只有普及的難度 

然後我就打了神奇的動態開點線段樹水過

qwq之後看題解發現正解是\( o(m^2) \)的暴力

因為常數小跑的更快啊qwq

#include #include 

#include

#define int long long

using

namespace

std;

int cnt=1,tr[150000

<<2],tag[150000

<<2],lx[150000

<<2],rx[150000

<<2],n,m,root=1

;void pushup(int

o)void pushdown(int o,int ln,int

rn)}

void update(int l,int r,int l,int r,int& o,int

c)

int mid=(l+r)>>1

; pushdown(o,mid-l+1,r-mid);

if(l<=mid)

if(r>mid)

pushup(o);

}int query(int l,int r,int l,int r,int &o)

int ans=0,mid=(l+r)>>1

; pushdown(o,mid-l+1,r-mid);

if(l<=mid)

if(r>mid)

ans+=query(l,r,mid+1

,r,rx[o]);

return

ans;

}void debug(int l,int r,int

o)signed main()

else

} return0;

}

洛谷 P2781 傳教

題目鏈結 讀完題後 哎線段樹水題呀!再一看資料範圍 好像 不對勁。其實這道題並不難,因為 m 值很小,所以可以用 o n 2 o n 2 o n2 的演算法直接過。對於每個 1 操作,把它記下來。對於每個 2 操作,將之前所有記錄的區間與 2 操作取個交集就 ok 了。當然也可以把 2 操作也記下來...

洛谷 P2781 傳教

題意很簡單,就是要求你寫乙個資料結構,支援區間加法和區間查詢 顯然,線段樹模板嘛。不過 n 10 9 驚呆世人,啊哈,靈光一現,分塊貌似可做,emmmm有感覺不行,nlogn 線段樹空間是炸掉了,re 50 分 include define n 100000000 using namespace s...

題解 洛谷P2161 會場預約(線段樹)

先說一下這道題的解題思路,我們使用離線操作的做法。記錄讀入的資料,把開始結束日期存在結構體裡,並記錄是a操作還是b操作。開乙個陣列記錄染色情況 乙個cnt陣列記錄第幾個操作推掉了幾個預約,讀入後我們倒著迴圈進行查詢,如果讀入的是b就跳過,如果是a的話就將開始到結束日期的所有點染成當前序號的顏色。如果...